import multiprocessing
from multiprocessing.dummy import Pool as ThreadPool
from functools import partial
import time
import random
def worker(name):
begin = time.time()
print(f'{name} 运行')
time.sleep(random.randrange(5, 15))
end = time.time()
print(f'{name} 运行结束,运行了{end - begin}秒')
return end - begin
def collectMyResult(result):
pass
# print("Got result {}".format(result))
def abortable_worker(func, *args, **kwargs):
timeout = kwargs.get('timeout', None)
name = kwargs.get("name",None)
p = ThreadPool(1)
res = p.apply_async(func, args=args)
try:
out = res.get(timeout) # Wait timeout seconds for func to complete.
return out
except multiprocessing.TimeoutError:
print(f"{name}运行超时,已终止")
raise
if __name__ == "__main__":
pool = multiprocessing.Pool(maxtasksperchild=1,processes=2)
names = ["赵","钱","孙","李"] # list of arguments
for name in names:
abortable_func = partial(abortable_worker, worker, timeout=10,name=name)
pool.apply_async(abortable_func, args=name, callback=collectMyResult)
pool.close()
pool.join()
解决了超时就终止的问题了