python 多线程与asyncio下载文件

 下面使用了concurrent.future : 并发入门

 例子中的ThreadPoolExecutor可以改成ProcessPoolExecutor 试试看,接口统一

 另外ProcessPoolExecutor 的参数默认值:os.cpu_count()

 map , submit, as_completed的参数及返回.参考文档

 分别使用了map 以及 submit 和 as_completed完成下载;

注意: as_completed 返回的future是完成或失败的.正在运行的不会返回;

可以修改max_workers参数看看变化

首先是map方法 . 如果你修改了我的代码去迭代map的返回值需要注意 迭代过程中会调用future.result() 因此会阻塞,

而我的代码中会阻塞的原因是在with 块中,最后会调用executor.shutdown,这个函数会等待所有的线程完成或失败

:

from concurrent import futures
import requests,time,sys,os

#常量
FLAGS = ('CN IN US ID BR PK NG BD RU JP ' 
         'MX PH VN ET EG DE IR TR CD FR').split()
BASE_URL = 'http://flupy.org/data/flags'        #下载url
DEST_DIR = 'downloads/'                           #保存目录
CHUNK_SIZE = 8192                                  #块大小
MAX_THREAD = 2
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值