Ich habe es geschafft, mein ähnliches Problem zu lösen. Ich bin mir nicht sicher, ob es für Sie hilfreich ist, aber ich habe beschlossen, es hier trotzdem zu dokumentieren, falls es jemandem hilft.
In meinem Fall analysierte ich eine riesige Menge an Tweets (insgesamt 52000), indem ich sie auf mehrere Prozessoren aufteilte. Es funktionierte gut auf OSX und auf dem Server, aber auf meinem Windows 8.1 war es wirklich langsam und Prozesse wurden nacheinander aktiviert. Als ich mir den Task-Manager genauer ansah, bemerkte ich, dass die Speicherauslastung des Haupt-Python-Prozesses auf etwa 1,5 GB anstieg. Die Speichernutzung des Arbeitsprozesses stieg ähnlich. Jetzt bemerkte ich, dass meine ältere Version gut funktionierte, die einen etwas anderen Algorithmus hatte. Am Ende war das Problem, dass ich ganze Tweets aus der Datenbank abgerufen habe, während ich nur den Textteil der Tweets benötigte. Dies führte offenbar zu einer erhöhten Speichernutzung. Nachdem ich diesen Teil repariert hatte, startete das Programm Worker-Prozesse ordnungsgemäß.
Basierend auf meiner Erfahrung habe ich eine Ahnung, dass Windows versucht, die RAM-Auslastung durch Blockieren der Worker-Prozesse zu steuern. Wenn ja, überprüfen Sie die RAM-Auslastung Ihrer Prozesse. Das ist nur Spekulation meinerseits, also interessiert mich, ob jemand eine bessere Erklärung hat.
'Pool .__ init__' ruft' cpu_count' auf, um die Standardanzahl von Prozessen zu erhalten (siehe ['Lib/multiprocessing/pool.py' in Zeile 146] (http://hg.python.org/cpython/file/ 3a1db0d2747e/Lib/multiprocessing/pool.py # l146)). Außerdem ruft der '__init__' _repopulate_pool' in [Zeile 159] (http://hg.python.org/cpython/file/3a1db0d2747e/Lib/multiprocessing/pool.py#l159) auf, der eine Schleife in [Zeile 213] ausführt. (http://hg.python.org/cpython/file/3a1db0d2747e/Lib/multiprocessing/pool.py#l213), die die richtige Anzahl von 'Process'-Instanzen hervorbringt. Bist du sicher, dass nur ein Arbeiter spawnt? Wie überprüfen Sie die Anzahl der Arbeiter? – Bakuriu
Ich bin sicher, weil ich nur einen zusätzlichen Python-Prozess sehe (und die Konvertierung dauert ewig). Ich habe sogar versucht, 'Pool (processes = 8)' zu übergeben, und wieder wurde nur ein Arbeiter erzeugt. – Drakkainen
Versuchen Sie, ein [minimales vollständiges Codebeispiel zu erstellen, das Ihr Problem anzeigt] (http://stackoverflow.com/help/mcve). Verwenden Sie beispielsweise 'def f (Pfad): print path, mp.current_process()' anstelle von ' convert_to_png() 'und aktivieren Sie die Protokollierung' mp.log_to_stderr(). setLevel (logging.DEBUG) '. – jfs