使用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()
核心逻辑说明
- 遍历输入列表,为每个元素单独调用
pool.schedule提交任务,同时将输入值与对应的Future对象绑定存储 - 遍历所有绑定好的任务对,逐个获取结果,捕获超时异常时直接使用绑定的输入值输出提示信息
这样修改后,每个超时任务都能精准对应到输入列表中的数值,输出符合预期的提示内容。
内容的提问来源于stack exchange,提问作者Will Brandow
相关产品推荐
相关产品推荐

