通过这一个多星期的摸索,终于写出了一个稳定的异步下载样例
该下载器下载使用异步IO下载urls列表文件中的图片,通过调整并行任务数,可以快速下载百万级的图片。
使用时,修改main.py文件中的url文件路径即可,根据网络速度和机器性能,调整max_tasks
和max_sem
。
当max_tasks过大,可能会造成IO错误“too many open files”的错误,这是因为同时保存过多的文件,程序打开的文件/socket连接数量超过系统设定值。
- 使用
ulimit -a
查看用户最大允许打开文件数量,其中open files (-n) 1024
表示每个用户最大允许打开的文件数量是1024 - 设置open files数值
$ ulimit -n 2048
这样就可以把当前用户的最大允许打开文件数量设置为2048了,但这种设置方法在重启后会还原成默认值
$ vim /etc/security/limits.conf
# 在最后加入
* soft nofile 4096 # 最前面的 * 表示所用用户,也可根据需要设置某一用户
* hard nofile 4096
改完后注销一下就能生效