2017-09-26 6 views
0

Heute bin ich im Multiprocessing gestartet, und hat natürlich einige Probleme.Python-Multiprocessing-Fehler beim Start 2. Prozess

I erstellen zwei Prozesse:

import multiprocessing as mp 

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

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

Wenn Startkode RssProc es andere 1-2 Sekunden arbeiten, beginnen fist-Prozess (twitterProc) und normal arbeiten, dann beginnt zweiten Prozess und nach 1-2 Sekunden, gestoppt mit solcher Fehlerliste:

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 

Was ist das und wie man es löst?

Antwort

0

Ich denke, der beste Weg ist join Methode nach der Erstellung des Prozesses zu verwenden. verbinden den Hauptthread informiert zu warten, bis der Prozess der Arbeit ist es vervollständigt

twitterProc.join() und RssProc.join() am Ende des Skripts