如果单个异步任务超过Python中的阈值时间,如何在多处理中终止单个异步任务

时间:2015-09-21 20:02:11

标签: python multiprocessing

如果在Python中单个异步任务超过阈值时间(例如,60秒),如何在WINDOWS中使用多处理来终止单个异步任务?

map(yourFunction, yourList)

2 个答案:

答案 0 :(得分:0)

据我所知,没有办法杀死已经发送到Pool对象的任务。

因为您可以控制子流程,所以您可以创建自己的“监视程序”'计时器,以确保该过程的执行时间不超过某些设定的时间。一种方法是生成一个等待条件事件超时的线程,并在计算没有及时完成时终止进程:

multiprocessing.TimeoutError

因为multiprocessing.Pool将重新生成在处理任务时死亡的任何进程,这应该会为您提供您正在寻找的结果。

确保你的get()调用也超时。因为这会在它超时的情况下抛出def main(): test_num_list = [10, 20, 30, 40, 50, 60, 70, 80] pool = mp.Pool(processes=3) results = [pool.apply_async(time_limited_compute, args=(test_num,)) for test_num in test_num_list] def get_or_none(r): try: return r.get(60) except mp.TimeoutError: return None output = [get_or_none(r) for r in results] print output if __name__ == '__main__': main() ,你需要处理它:

SELECT table_schema, table_name
FROM   information_schema.tables t
WHERE  NOT EXISTS (SELECT *
                   FROM   table_constraints tc
                   WHERE  t.table_schema = tc.table_schema AND
                          t.table_name = tc.table_name AND
                          tc.constraint_type = 'FOREIGN KEY')

答案 1 :(得分:0)

已经回答了here您的问题。

您可以使用pebble进程池来实现此目的。