2017-12-17 2 views
0

Ich habe zwei Entwicklungsumgebungen ... einen Windows-Computer und einen Mac für unterwegs. Das Skript läuft auf dem Windows-Computer einwandfrei und durchläuft alle Pools. Aber auf dem Mac hängt es einfach. Es funktioniert, aber wenn ich den Prozess manuell zu 1.Multiprocessing hängt, wenn fertig auf dem Mac, aber nicht Windows

Dies hängt ...

def insert_user_request(self, data): 
    pool_size = multiprocessing.cpu_count() * 2 
    pool = multiprocessing.Pool(processes=pool_size) 
    pool.map(self.insert_user, data) 

Dies funktioniert ...

def insert_user_request(self, data): 
    pool_size = 1 
    pool = multiprocessing.Pool(processes=pool_size) 
    pool.map(self.insert_user, data) 

Die Funktion der Pool ruft Einsätze zählen gesetzt Daten in eine Datenbank und sicher genug, die Daten gehen in Ordnung. Es ist also das "Herunterfahren" der Pools, das scheint das Problem zu sein.

+0

Gleiche Versionsnummern von Python und allen beteiligten Bibliotheken? – Doon

+1

Wenn Sie Threads im Mac-Programm verwendet haben, könnte das ein Problem sein. Wenn Sie Python 3 verwenden, sollten Sie die ['spawn' Startmethode] (https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods) anprobieren Mac auch –

+0

Die Spawn-Start-Methode hat funktioniert. Danke, Antti! – TravisVOX

Antwort

0

Kredit an Antti Haapala in den Kommentaren der ursprünglichen Frage, aber die Spawn-Start-Methode funktionierte.

def insert_user_request(self, data): 
    multiprocessing.set_start_method('spawn') 
    pool_size = multiprocessing.cpu_count() * 2 
    pool = multiprocessing.Pool(processes=pool_size) 
    pool.map(self.insert_user, data) 
Verwandte Themen