超时处理多进程函数

6 投票
1 回答
4516 浏览
提问于 2025-04-17 08:50

我需要给一个使用了多进程的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()

也就是说,不要在函数里设置一个超时,而是把这个过程和超时一起处理。如果这个过程在超时后还没有完成,就把它结束掉。

撰写回答