You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pebble ProcessPool超时功能时获取超时对应的迭代值

解决Pebble ProcessPool超时后获取对应输入值的问题

问题出在pool.map的机制上:当迭代其结果抛出TimeoutError时,无法直接关联到触发超时的原始输入值。要实现超时后输出对应数值,需要放弃map,改为逐个提交任务并绑定输入值,具体实现如下:

修改后的完整代码:

from pebble import ProcessPool
import time

def test_fn(randomNumberFromList):
    if randomNumberFromList in [1,66,3,88,5,777]:
        time.sleep(10)
        return [randomNumberFromList, True]
    else:
        time.sleep(1)
        return [randomNumberFromList, True]

def main(): 
    list1 = [1, 2, 3, 4, 5, 6, 20, 33, 55, 233, 44, 66, 2666, 555, 8888, 888, 88, 77, 777, 7777, 77777]
    with ProcessPool() as pool:
        # 绑定输入值与对应的任务Future
        tasks = []
        for num in list1:
            future = pool.schedule(test_fn, args=(num,), timeout=4)
            tasks.append( (num, future) )
        
        # 逐个处理任务结果
        for num, future in tasks:
            try:
                result = future.result()
                print(result)
            except TimeoutError:
                print(f'{num} 耗时超过4秒')

if __name__ == "__main__":
    main()

核心逻辑说明

  1. 遍历输入列表,为每个元素单独调用pool.schedule提交任务,同时将输入值与对应的Future对象绑定存储
  2. 遍历所有绑定好的任务对,逐个获取结果,捕获超时异常时直接使用绑定的输入值输出提示信息

这样修改后,每个超时任务都能精准对应到输入列表中的数值,输出符合预期的提示内容。

内容的提问来源于stack exchange,提问作者Will Brandow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:35:07