2017-09-26 87 views
0

今天我開始進行多處理,當然有一些問題。開始第二個進程時Python多處理錯誤

創建兩個過程:

import multiprocessing as mp 

# twitter parser 
twitterProc = mp.Process (target=TwitterProcess) 
twitterProc.start() 

# rss parser 
RssProc = mp.Process (target=RssProcess) 
RssProc.start() 

當碼開始RssProc它工作的其他1-2秒,啓動拳頭處理(twitterProc)並將其正常工作,然後開始第二過程和1-2秒後它停止了這樣的錯誤列表:

Connected to pydev debugger (build 172.3757.67) 
Traceback (most recent call last): 
Error in atexit._run_exitfuncs: File "_pydevd_bundle/pydevd_cython.pyx", line 735, in _pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch (_pydevd_bundle/pydevd_cython.c:15637) 

Traceback (most recent call last): 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/atexit.py", line 24, in _run_exitfuncs 
func(*targs, **kargs) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/util.py", line 325, in _exit_function 
p.join() 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 145, in join 
self.do_wait_suspend(thread, frame, event, arg) 
File "_pydevd_bundle/pydevd_cython.pyx", line 252, in _pydevd_bundle.pydevd_cython.PyDBFrame.do_wait_suspend (_pydevd_bundle/pydevd_cython.c:5643) 
self._args[0].do_wait_suspend(*args, **kwargs) 
File "/Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py", line 767, in do_wait_suspend 
res = self._popen.wait(timeout) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/forking.py", line 154, in wait 
return self.poll(0) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/forking.py", line 135, in poll pid, sts = os.waitpid(self.pid, flag) 
KeyboardInterrupt 
time.sleep(0.01) 
KeyboardInterrupt 
Process Process-RSS: 
Traceback (most recent call last): 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap 
Error in sys.exitfunc: 
Traceback (most recent call last): 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/atexit.py", line 24, in _run_exitfuncs 
func(*targs, **kargs) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/util.py", line 325, in _exit_function 
self.run() 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 114, in run 
p.join() 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 145, in join 
self._target(*self._args, **self._kwargs) 
File "/Users/Stas/PycharmProjects/untitled/streambot.py", line 674, in __init__ 
res = self._popen.wait(timeout) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/forking.py", line 154, in wait 
return self.poll(0) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/forking.py", line 135, in poll 
pid, sts = os.waitpid(self.pid, flag) 
KeyboardInterrupt 
for source in config.feedList: 
File "/Users/Stas/PycharmProjects/untitled/streambot.py", line 674, in __init__ 
for source in config.feedList: 
File "_pydevd_bundle/pydevd_cython.pyx", line 970, in _pydevd_bundle.pydevd_cython.SafeCallWrapper.__call__ (_pydevd_bundle/pydevd_cython.c:19428) 
ret = (<object>method_obj)(*args) 
File "_pydevd_bundle/pydevd_cython.pyx", line 501, in _pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch (_pydevd_bundle/pydevd_cython.c:18762) 
cpdef trace_dispatch(self, frame, str event, arg): 
File "_pydevd_bundle/pydevd_cython.pyx", line 744, in _pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch (_pydevd_bundle/pydevd_cython.c:15791) 
raise 
File "_pydevd_bundle/pydevd_cython.pyx", line 735, in _pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch (_pydevd_bundle/pydevd_cython.c:15637) 
self.do_wait_suspend(thread, frame, event, arg) 
File "_pydevd_bundle/pydevd_cython.pyx", line 252, in _pydevd_bundle.pydevd_cython.PyDBFrame.do_wait_suspend (_pydevd_bundle/pydevd_cython.c:5643) 
self._args[0].do_wait_suspend(*args, **kwargs) 
File "/Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py", line 767, in do_wait_suspend 
time.sleep(0.01) 
KeyboardInterrupt 

Process finished with exit code 0 

這是什麼以及如何解決它?

回答

0

我認爲最好的方法是在創建過程後使用join方法。加入通知主線程等待,直到該進程完成它的工作

twitterProc.join()RssProc.join()在腳本結束