私はPythonで単純な複数のプロセスアプリケーションを実行しようとしています。メインスレッドは1からNのプロセスを生成し、処理が完了するまで待機します。プロセスそれぞれが無限ループを実行するので、彼らは潜在的にいくつかのユーザーを中断することなく永遠に実行することができますので、私はKeyboardInterruptを処理するためにいくつかのコードを入れ:Pythonマルチプロセッシングatexitエラー "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()
問題で使用した場合CTRL-Cが終了していること、Iプロセスが直ちに終了するように見えても、追加のエラーが発生します。
......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
私はWindowsでPython 2.6を実行しています。 Pythonでマルチプロセッシングを処理するより良い方法があれば、教えてください。
可能であれば、このソリューションの実行可能な例を追加できますか? – cmcginty