Ich versuche, eine einfache Anwendung für mehrere Prozesse in Python auszuführen. Der Hauptthread erzeugt 1 bis N Prozesse und wartet, bis die Verarbeitung abgeschlossen ist. Die Prozesse jeweils eine Endlosschleife laufen, also können sie möglicherweise für immer ohne einige Benutzer Unterbrechung laufen, so habe ich in einigen Code ein KeyboardInterrupt zu handhaben:Python Multiprocessing atexit Fehler "Fehler in atexit._run_exitfuncs"
#!/usr/bin/env python
import sys
import time
from multiprocessing import Process
def main():
# Set up inputs..
# Spawn processes
Proc(1).start()
Proc(2).start()
class Proc (Process):
def __init__ (self, procNum):
self.id = procNum
Process.__init__(self)
def run (self):
doneWork = False
while True:
try:
# Do work...
time.sleep(1)
sys.stdout.write('.')
if doneWork:
print "PROC#" + str(self.id) + " Done."
break
except KeyboardInterrupt:
print "User aborted."
sys.exit()
# Main Entry
if __name__=="__main__":
main()
Das Problem ist, dass bei der Verwendung von STRG + C, um zu beenden, I Erhalte einen zusätzlichen Fehler, obwohl die Prozesse augenblicklich zu beenden scheinen:
......User aborted.
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "C:\Python26\lib\atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "C:\Python26\lib\multiprocessing\util.py", line 281, in _exit_function
p.join()
File "C:\Python26\lib\multiprocessing\process.py", line 119, in join
res = self._popen.wait(timeout)
File "C:\Python26\lib\multiprocessing\forking.py", line 259, in wait
res = _subprocess.WaitForSingleObject(int(self._handle), msecs)
KeyboardInterrupt
Error in sys.exitfunc:
Traceback (most recent call last):
File "C:\Python26\lib\atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "C:\Python26\lib\multiprocessing\util.py", line 281, in _exit_function
p.join()
File "C:\Python26\lib\multiprocessing\process.py", line 119, in join
res = self._popen.wait(timeout)
File "C:\Python26\lib\multiprocessing\forking.py", line 259, in wait
res = _subprocess.WaitForSingleObject(int(self._handle), msecs)
KeyboardInterrupt
Ich verwende Python 2.6 unter Windows. Wenn es eine bessere Möglichkeit gibt, Multiprozessing in Python zu behandeln, lass es mich wissen.
Wenn möglich, können Sie ein ausführbares Beispiel für diese Lösung hinzufügen. – cmcginty