Python concurrent.futures模块使用实例

  

这篇文章主要介绍了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模块使用实例