Python线程池模块,与进程池模块

1 篇文章 0 订阅
1 篇文章 0 订阅
Python线程池模块,与进程池模块
一、线程池ThreadPoolExecutor
# 导入模块
from concurrent.futures import ThreadPoolExecutor
# 常用方法map方法和submit+as_completed
# 注意,一定要使用with,而不要使用for,如果你一定要用for,那么一定要手动进行executor.shutdown,而你使用了with方法的话,再with方法内部已经实现了wait(),在使用完毕之后可以自行关闭线程池,减少资源浪费。

1.使用map方法:
with ThreadPoolExecutor(max_workers=2) as executor:
      result = executor.map(map_fun, itr_arg)
      '''map_fun:你传入的要执行的map函数
        itr_arg:一个可迭代的参数,可以是列表字典等可迭代的对象
        基本上和python的map函数一样
        注意result并不是你map_fun返回的结果,而是一个生成器,如果要从中去结果,你可以使用列表生成式或者其他你想使用的方法
      '''
      for res in result:
        print(res) #这个res就是你map_fun返回的结果,你可以在这里做进一步处理
2.使用submit+as_completed
with ThreadPoolExecutor(max_workers=2) as executor:
      future= executor.submit(fun, args)
      '''
      在这里你可以使用for循环来做,返回的是一个future对象
      future_list=[]
      for i in range(max_workers):
        future= executor.submit(fun, args[i])
        future_list.append(future)
      '''
      for res in ac_completed(futrue_list): #这个futrure_list是你future对象的列表
        print(res.result())        #循环遍历时用.result()来取返回值
    
########################
def download_all(sites):
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        to_do = []
        for site in sites:
            future = executor.submit(download_one, site)
            to_do.append(future)

        for future in concurrent.futures.as_completed(to_do):
            future.result()

Python标准库为我们提供了threading和multiprocessing模块编写相应的异步多线程/多进程代码。从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor(线程池)和ProcessPoolExecutor(进程池)两个类。

参考博客:https://www.jb51.net/article/153641.htm

https://blog.csdn.net/liuchunming033/article/details/98068216

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值