Python 3.14 Executor.map 的 buffersize 用于大批量代理
使用 Python 3.14 的 Executor.map buffersize,在结果等待期间暂停输入消费,与 max_workers 无关。
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。