Python中的异步与多进程

本文介绍了Python3.5以后如何使用异步和多进程进行LFPW数据集的下载。对比了多进程(使用进程池)和异步IO(async/await与aiohttp模块)的性能,结果显示异步方式的下载速度显著优于多进程,主要原因是异步IO的非阻塞特性提高了效率。
摘要由CSDN通过智能技术生成

Python自3.5以来,引入了asyncawait关键字,更好支持了异步IO的操作。本文以下载LFPW数据集为例,对比多进程和异步IO。

LFPW

LFPW was used to evaluate a face part (facial fiducial point) detection method which was trained on 1,132 images and tested on 300 images, and so the data set is divided into two files, one for training and testing.

LFPW是人脸特征点检测的一个数据集。和别的数据集不一样的是,这个数据集没有给出图片,仅仅给出了图片的url。该数据集共给出了1132张训练集和300张测试集数据,由于很多图片url失效,所以1132张图片并不能完全下载下来。这些图片的url保存在一个csv文件中,需要从csv读取到url后进行下载。csv的读取使用了ReadCSV模块,url解析使用了URLParser模块。

多进程

多进程下载使用进程池进行下载。首先引入multiprocessing模块,使用Pool创建进程池,随后将任务加入进程池就完成了。

def main_downloader(csv_path,save_image_path):
    url_list=readcsv(csv_path)

    p=Pool(4)

    for image_url in url_list:
        p.apply_async(download_one_url,args=(image_url,save_image_path))

    p.close()
    p.join()
    print("Everything is OK")

p=Pool(4)创建一个大小为4的进程池,使用p.apply_async()将任务加入进程池,对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的任务了。

异步

Python3.5中实现异步操作的是async和await关键字,Python官方文档对此有详细解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值