这篇文章主要介绍了Python concurrent.futures模块使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
并发。期货的作用:
管理并发任务池.concurrent.futures模块提供了使用工作线程或进程池运行任务的接口。线程和进程池API都是一样,所以应用只做最小的修改就可以在线程和进程之间地切换
<强> 1,基于线程池使用地图()强>
futures_thread_pool_map。py
#?usr/bin/env python # - * -编码:utf - 8 - * 从并发导入期货 进口线程 导入的时间 def任务(n): 打印(“{}:睡眠{}“.format (threading.current_thread () . name, n)) 时间。睡眠(n/10) 打印(“{}:执行完成{}“.format (threading.current_thread () . name, n)) 返回n/10 前女友=futures.ThreadPoolExecutor (max_workers=2) print(主要:开始运行”) 结果=ex.map(任务、范围(5 0 1)#返回值是发电机生成器 print(主要:未处理的结果{}“.format(结果)) print(主要:等待真实结果”) real_results=列表(结果) print(主要:最终结果:{}“.format (real_results))
运行效果
[root@ mnt] # python3 futures_thread_pool_map.py 主要:开始运行 ThreadPoolExecutor-0_0:睡眠5 ThreadPoolExecutor-0_1:睡眠4 主要:未处理的结果& lt;发电机对象Executor.map灵活;locals>。在0 x7f1c97484678> result_iterator; 主要:等待真实结果 ThreadPoolExecutor-0_1:执行完成4 ThreadPoolExecutor-0_1:睡眠3 ThreadPoolExecutor-0_0:执行完成5 ThreadPoolExecutor-0_0:睡眠2 ThreadPoolExecutor-0_0:执行完成2 ThreadPoolExecutor-0_0:睡眠1 ThreadPoolExecutor-0_1:执行完成3 ThreadPoolExecutor-0_0:执行完成1 主要:最终结果:[0.5,0.4,0.3,0.2,0.1)
<强> 2、期货执行单个任务强>
futures_thread_pool_submit。py
#?usr/bin/env python # - * -编码:utf - 8 - * 从并发导入期货 进口线程 导入的时间 def任务(n): 打印(“{}:睡眠{}“.format (threading.current_thread () . name, n)) 时间。睡眠(n/10) 打印(“{}:执行完成{}“.format (threading.current_thread () . name, n)) 返回n/10 前女友=futures.ThreadPoolExecutor (max_workers=2) print(主要:开始”) f=ex.submit(任务,5) 打印(“主要:未来:{}”.format (f)) 打印('等待运行结果”) 结果=f.result () 打印(“主要:结果:{}”.format(结果)) print(主要:未来之后的结果:{}“.format (f))
运行效果
[root@ mnt] # python3 futures_thread_pool_submit.py 主要:开始 ThreadPoolExecutor-0_0:睡眠5 主要:未来:& lt;未来0=running> x7f40c0a6a400状态; 等待运行结果 ThreadPoolExecutor-0_0:执行完成5 主要结果:0.5 主要:未来之后的结果:& lt;未来0 x7f40c0a6a400状态=完成返回float>
<强> 3,futures.as_completed()按任意顺序运行结果强>
futures_as_completed。py
#?usr/bin/env python # - * -编码:utf - 8 - * 进口随机 导入的时间 从并发导入期货 def任务(n): time . sleep (random.random ()) 返回(n, n/10) 前女友=futures.ThreadPoolExecutor (max_workers=2) print(主要:开始”) wait_for=[ ex.submit(任务,我)我的范围(5 0 1) ] 在futures.as_completed f (wait_for): 打印(“主要:结果:{}”.format (f.result ()))
运行效果
[root@ mnt] # python3 futures_as_completed.py 主要:开始 主要结果:0.5 (5) 主要结果:0.4 (4) 主要结果:0.3 (3) 主要结果:0.1 (1) 主要结果:0.2 (2)
<强> 4,未来回调之futures.add_done_callback() 强>
futures_future_callback。py
#?usr/bin/env python # - * -编码:utf - 8 - * 从并发导入期货 导入的时间 def任务(n): 打印(“任务{}:睡眠”.format (n)) time . sleep (0.5) 打印(“任务{}:完成“.format (n)) 返回n/10 def完成(fn): 如果fn.cancelled (): 打印(“{}:取消”.format (fn.arg)) elif fn.done (): 错误=fn.exception () 如果错误: 打印(“{}:错误返回:{}“.format (fn。参数错误)) 其他: 结果=fn.result () 打印(“{}:正常返回:{}“.format (fn。参数,结果) if __name__==癬_main__”: 前女友=futures.ThreadPoolExecutor (max_workers=2) print(主要:开始”) f=ex.submit(任务,5) f。arg=5 f.add_done_callback(完成) 结果=f.result ()Python concurrent.futures模块使用实例