【发布时间】:2018-12-27 11:31:14
【问题描述】:
import concurrent.futures
import time
def process_one(i):
try:
print("dealing with {}".format(i))
time.sleep(50)
print("{} Done.".format(i))
except Exception as e:
print(e)
def process_many():
with concurrent.futures.ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
executor.map(process_one,
range(100),
timeout=3)
if __name__ == '__main__':
MAX_WORKERS = 10
try:
process_many()
except Exception as e:
print(e)
docs 说:
如果调用
__next__()并且在从最初调用Executor.map()开始的timeout秒后结果不可用,则返回的迭代器会引发concurrent.futures.TimeoutError
但是这里的脚本没有引发任何异常并一直在等待。有什么建议吗?
【问题讨论】:
-
您是要终止挂起的作业,还是希望整个
process_many调用花费大约 3 秒或更短的时间? -
@arachnivore 杀死挂起的作业并释放它们占用的线程。
-
哪个python版本?
标签: python concurrency concurrent.futures