python并发之concurrent.futures

Python中进行并发编程一般使用threading和multiprocessing模块,不过大部分的并发编程任务都是派生一系列线程/进程,从队列中收集资源,然后用队列收集结果。在这些任务中,往往需要生成线程池,concurrent.futures模块对threading和multiprocessing模块进行了进一步的包装,可以很方便地实现池的功能。

安装

python3中concurrent.futures是标准库,在python2中还需要自己安装concurrent.futures。

Executor与Future

concurrent.futures供了ThreadPoolExecutor和ProcessPoolExecutor两个类,都继承自Executor,分别被用来创建线程池和进程池,接受max_workers参数,代表创建的线程数或者进程数。ProcessPoolExecutor的max_workers参数可以为空,程序会自动创建基于电脑cpu数目的进程数。

1

2

3

4

5

6

7

8

9

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor

import requests

 

def load_url(url):

    return requests.get(url)

 

url = 'http://httpbin.org'

executor = ThreadPoolExecutor(max_workers=1)

future = executor.submit(load_url, url)

submit()方法只能进行单个任务,用并发多个任务,需要使用map与as_completed。

map

1

2

3

4

5

6

7

8

URLS = ['http://httpbin.org''http://example.com/''https://api.github.com/']

 

def load_url(url):

    return requests.get(url)

 

with ThreadPoolExecutor(max_workers=3) as executor:

    for url, data in zip(URLS, executor.map

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值