python-multiprocessing-pool, warten Sie, bis die Prozesse und starten Sie benutzerdefinierte Prozesse
Früher habe ich python multiprocessing und tun, warten, dass alle Prozesse mit diesem code:
...
results = []
for i in range(num_extract):
url = queue.get(timeout=5)
try:
print "START PROCESS!"
result = pool.apply_async(process, [host,url],callback=callback)
results.append(result)
except Exception,e:
continue
for r in results:
r.get(timeout=7)
...
ich versuche, mit pool.beitreten, bekomme aber Fehler:
Traceback (most recent call last):
File "C:\workspace\sdl\lxchg\walker4.py", line 163, in <module>
pool.join()
File "C:\Python25\Lib\site-packages\multiprocessing\pool.py", line 338, in joi
n
assert self._state in (CLOSE, TERMINATE)
AssertionError
Warum treten Sie nicht funktionieren? Und was ist der gute Weg, warten alle Prozesse.
Meine zweite Frage ist, wie kann ich neu starten bestimmter Prozess im pool? ich brauche das im Grund des memory-leak. Nun In der Tat mache ich den Umbau im pool, nachdem alle Prozesse Ihre Aufgaben (erstellen Sie neue Objekt-pool zu tun Prozess-Neustart).
Was ich brauche: ich habe zum Beispiel 4 Verfahren im pool. Dann Prozess, seine Aufgabe nach Aufgabe wird erledigt, ich brauche die Prozess Abbrechen und neu starten (auffrischen memory leak).
- warum ist
multiprocessing/pool.py
Leben insite-packages
und nicht direkt inLib
? Wenn Sie schon hacken, dann haben wir eine Art wissen müssen. - hmm.. ich weiß nicht wie ich es installieren mit dem windows installer... geted von der offiziellen Website..
- ich habe python2.5
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie immer der Fehler, da müssen Sie rufen Sie
pool.close()
vor dem Aufrufpool.join()
Ich weiß nicht ein guter Weg, um shut-down-Prozess gestartet, mit
apply_async
aber sehen, wenn ordnungsgemäß Herunterfahren den pool-nicht Ihren Speicher-Leck Weg.Der Grund, warum ich denke, das ist, dass die
Pool
Klasse hat eine Reihe von Attributen, die threads im daemon-Modus läuft. Alle diese threads bereinigt werden, indem diejoin
Methode. Der code, den Sie jetzt haben, nicht bereinigt werden, so dass, wenn Sie erstellen eine neuePool
, Sie haben noch alle diese Fäden laufen von der letzten.del
die Mitglieder des Zyklus, wenn Sie mit Ihnen durch, so dass der garbage-collector kann den Speicherplatz freizugeben.