2017-09-26 9 views
0

今日、私はマルチプロセッシングを開始しましたが、もちろんいくつか問題があります。2番目のプロセスを開始すると、Pythonのマルチプロセッシングエラーが発生する

は、私は2つのプロセスを作成:

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()仕事だ完了するまで待機し、メインスレッドに通知し参加

関連する問題