मैं पाइथन में एक सरल एकाधिक प्रक्रिया अनुप्रयोग चलाने की कोशिश कर रहा हूं। मुख्य धागा 1 से एन प्रक्रियाओं को जन्म देता है और जब तक वे सभी प्रसंस्करण नहीं करते हैं तब तक प्रतीक्षा करते हैं। प्रक्रियाओं को एक अनंत लूप चलाने के लिए, ताकि वे संभवतः बिना कुछ उपयोगकर्ता रुकावट हमेशा के लिए चला सकते हैं, तो मैं कुछ कोड एक KeyboardInterrupt संभाल करने में डाल दिया:पायथन मल्टीप्रोसेसिंग अयोग्य त्रुटि "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 बाहर निकलने के लिए है कि, मैं प्रक्रियाओं को तत्काल बाहर निकलने के बावजूद अतिरिक्त त्रुटि प्राप्त करें:
......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
मैं विंडोज पर पायथन 2.6 चला रहा हूं। यदि पाइथन में मल्टीप्रोसेसिंग को संभालने का बेहतर तरीका है, तो कृपया मुझे बताएं।
यदि संभव हो, तो क्या आप इस समाधान का एक रननेबल उदाहरण जोड़ सकते हैं। – cmcginty