Почему эта программа на Python иногда не завершается?

Я написал тестовую программу, в которой есть два процесса. Отцовский процесс получает данные из очереди, а дочерний процесс помещает в нее данные. Есть обработчик сигнала, который сообщает программе о выходе. Однако иногда он не завершается, когда я отправляю сигнал SIGTERM напечатанному мной pid (дочернему процессу), и, похоже, происходит тупик.

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()
6
задан cwallenpoole 21 June 2011 в 02:10
поделиться