使用`concurrent.futures.ThreadPoolExecutor`提出的超时太晚了

问题描述 投票:1回答:2

运行此代码时

def f(t):
    time.sleep(t)
    return t

with ThreadPoolExecutor(max_workers=300) as pool:
    res = list(pool.map(f, [2, 10], timeout=1))

它确实扔了一个TimeoutError,但仅在10秒后(time.sleeps的最大值)。如果期望TimeoutError在1秒后发生(超时持续时间)。

我怎样才能解决这个问题?

python multithreading
2个回答
0
投票

这似乎做了这个工作

from multiprocessing.dummy import Pool

with Pool(300) as pool:
    map_res = pool.map_async(f, [2, 10])
    res = map_res.get(timeout=1)

0
投票
import time

from concurrent.futures import ThreadPoolExecutor

def f(t):
    time.sleep(t)
    return t

pool = ThreadPoolExecutor(max_workers=300)
res = list(pool.map(f, [2, 10], timeout=1))

它工作,但说实话,我不知道为什么使用上下文管理器它不起作用

© www.soinside.com 2019 - 2024. All rights reserved.