超时处理多进程函数
我需要给一个使用了多进程的Python函数设置一个时间限制(我不知道这是否重要)。我想要的效果是这样的:
function(a_list):
p1 = Process(a_list[0:len(a_list/2)])
p2 = Process(a_list[len(a_list)/2: len(a_list)])
//start and join p1, p2
我在网上查了一下,发现有一个超时装饰器,但看起来有点复杂,而且代码也比较冗长(我对装饰器还不太熟悉)。我希望能有一个简单点的方法。
编辑:
我觉得我之前说得太简单了。我的程序会对上面的函数进行多次循环,并把结果存储在一个列表里,类似这样:
while(something):
retval = function(some_list) # here I need the time out thing
# if function timed out then skip
ris_list.append(retval)
1 个回答
11
你可以用下面的代码来实现这个功能:
process.join(timeout)
if process.is_alive():
process.terminate()
也就是说,不要在函数里设置一个超时,而是把这个过程和超时一起处理。如果这个过程在超时后还没有完成,就把它结束掉。