मैंने एक परीक्षण कार्यक्रम लिखा, जिसमें दो प्रक्रियाएं हैं। पिता की प्रक्रिया एक कतार से डेटा प्राप्त करती है, और बच्चा इसमें डेटा डालता है। एक सिग्नल हैंडलर है जो कार्यक्रम से बाहर निकलने के लिए कहता है। हालांकि, यह कभी-कभी बाहर नहीं निकलता है जब मैं सिग्नल SIGTERM को मुद्रित पिड (बाल प्रक्रिया) में भेजता हूं, और ऐसा लगता है कि यह एक डेडलॉक है।यह पाइथन प्रोग्राम कभी-कभी बाहर निकलने में विफल क्यों होता है?
import os
import sys
import multiprocessing
import time
import signal
bStop = False
def worker(que):
signal.signal(signal.SIGTERM,sighandler)
print 'worker:',os.getpid()
for i in range(100000000):
que.put(i)
print 'STOP'
def sighandler(num,frame):
print 'catch signal'
q.put('STOP')
sys.exit(0)
q = multiprocessing.Queue(100)
p = multiprocessing.Process(target=worker,args=(q,))
p.start()
for item in iter(q.get,'STOP'):
print 'get',item
pass
print 'main stop'
p.join()
वाह ... 100,000,000 के साथ आप उस सीमा के बारे में मजाक नहीं कर रहे थे, क्या आप थे? – cwallenpoole
@cwallenpoole मैं बस इसे लंबे समय तक चलाना चाहता हूं .... – renenglish
ठीक है, यह 20 मिनट तक पृष्ठभूमि में चल रहा है और अभी तक 50,000,000 तक नहीं मिला है – cwallenpoole