2011-06-20 49 views
6

我写了一个测试程序,它有两个进程。父进程从队列中获取数据,并且子进程将数据放入其中。有一个信号处理程序告诉程序退出。但是,当我将信号SIGTERM发送到我打印的pid(子进程)时,它不会退出,并且它似乎有一个死锁。为什么这个python程序有时无法退出?

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() 
+0

哇......有了100,000,000,你不是在开玩笑,你呢? – cwallenpoole

+0

@cwallenpoole我只是想运行很长一段时间.... – renenglish

+0

那么,它已经在后台运行了20分钟,还没有达到50,000,000还 – cwallenpoole

回答

1

除非你正在运行python 3,否则你应该使用xrange来代替范围大的循环。 Python一旦超过特定的列表大小就会窒息,所以你真的需要在那个时候移动到生成器。

这很好,可能是你现在看到的问题。

相关问题