Ich habe kürzlich Multiprocessing für Python entdeckt, also spiele ich ein bisschen damit herum und rannte gegen eine Wand.Python-Multiprozessing lehnt Schleife ab
Dies ist das Skript Ich arbeite mit:
import multiprocessing, time
def p_def():
print "running p"
time.sleep(5)
def v_def():
print "running v"
time.sleep(5)
p = multiprocessing.Process(target=p_def)
v = multiprocessing.Process(target=v_def)
while True:
time.sleep(0.25)
p.start()
while p.is_alive() == True:
time.sleep(0.5)
print "waiting for it to finish"
Alle funktioniert gut, wenn ich den Code ausführen, startet er den p_def, aber wenn es fertig ist und will es wieder laufen, läuft es in eine snag und gibt mir diesen Fehler aus:
running p
waiting for it to finish
waiting for it to finish
waiting for it to finish
waiting for it to finish
waiting for it to finish
waiting for it to finish
waiting for it to finish
waiting for it to finish
waiting for it to finish
waiting for it to finish
Traceback (most recent call last):
File "proc.py", line 19, in <module>
p.start()
File "/usr/lib/python2.7/multiprocessing/process.py", line 120, in start
assert self._popen is None, 'cannot start a process twice'
AssertionError: cannot start a process twice
Das scheint mir ein wenig seltsam. Mein Verständnis sagt, dass es in der Lage sein sollte, es wieder zu laufen, obwohl, was ich online sehe, Leute sagen, dass es dasselbe zweimal nicht laufen kann.
Was ist die Wahrheit und wie kann ich es zweimal laufen lassen?
nicht direkt auf die Frage bezogen, sondern statt Besetzt warten auf den Prozess zu beenden, können Sie (und wahrscheinlich sollte) verwenden, um die 'p.join()' Funktion. –