max_workers=8 限制的是执行线程数。它并不能阻止一个单独的提交循环为海量输入中的每个端点创建 Future。

Python 3.14 新增了一个有界的预读选项:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=8) as executor:
    for result in executor.map(check_proxy, endpoints, buffersize=24):
        record_result(result)

check_proxy 是现有的同步检测,带有网络超时与清理;record_result 负责处理它返回的观测结果。数值 8 和 24 只是示例预算。免费代理列表 为端点提供公开候选;请把每个地址的协议一并保留,以便 check_proxy 使用正确的传输方式。

当提交缓冲区填满时,map 会暂停消费可迭代对象,直到结果被产出。这对生成器同样适用。

map 仍然按输入顺序产出:某个较早的慢检测会占住后面已经完成的结果,并延迟后续输入。若想按完成顺序处理,请使用一个显式有界、随完成情况补充的 futures 集合。

如果批次要继续产出结果,请在检测内部处理可预期的网络故障。未处理的异常会在取该元素时抛出。ThreadPoolExecutor 的 chunksize 并不提供这个提交预算,而更早的 Python 版本没有 buffersize。

相关文章