如果在Python中单个异步任务超过阈值时间(例如,60秒),如何在WINDOWS中使用多处理来终止单个异步任务?
map(yourFunction, yourList)
答案 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)