python多进程使用apply_async的使用方法详解
前言:
python在同一个线程中多次执行同一方法时,该方法执行耗时较长且每次执行过程及结果互不影响,如果只在主进程中执行,效率会很低,因此使用multiprocessing.Pool(processes=n)及其apply_async()方法提高程序执行的并行度从而提高程序的执行效率,其中processes=n为程序并行执行的进程数。
apply_async是异步非阻塞式,不用等待当前进程执行完毕,随时跟进操作系统调度来进行进程切换,即多个进程并行执行,提高程序的执行效率。
示例代码1:
import time import random import multiprocessing def func(x): ts = random.randint(1, 10) time.sleep(ts) print(f'{x}执行完毕!耗时{ts}s') if __name__ == '__main__': pool = multiprocessing.Pool(6) for i in range(6): print(f"开始执行第{i}个任务...") pool.apply_async(func, args=(i, )) pool.close() pool.join()
运行结果:
在使用apply_async()方法接收多个参数的方法时,在任务方法中正常定义多个参数,参数以元组形式传入即可 但是给apply_async()方法传入多个值获取多个迭代结果时就会报错,因为该方法只能接收一个值,所以可以将该方法放入一个列表生成式中。
示例代码2:
import multiprocessing def func(x): return x ** 2 if __name__ == '__main__': pool = multiprocessing.Pool() res = [pool.apply_async(func, (i, )) for i in range(6)] print([x for x in res]) print([x.get() for x in res]) pool.close() pool.join()
运行结果:
注意:join()等待所有子进程结束后再运行,使用join()前先使用close()关闭它。
到此这篇关于python多进程使用apply_async使用方法详解的文章就介绍到这了,更多相关python apply_async 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python使用textract实现从各种文件中提取文本信息
textract是一个强大的Python库,可以用于从各种文件格式中提取文本,本文将介绍textract的使用场景,以及一些常用的Python代码案例,希望对大家有所帮助2024-01-01Python ORM框架SQLAlchemy学习笔记之数据查询实例
这篇文章主要介绍了Python ORM框架SQLAlchemy学习笔记之数据查询实例,需要的朋友可以参考下2014-06-06Python数据可视化之matplotlib.pyplot绘图的基本参数详解
matplotlib.pyplot模块是一个功能强大的画图模块,可以对画图的多个参数进行调整,下面这篇文章主要给大家介绍了关于Python数据可视化之matplotlib.pyplot绘图基本参数的相关资料,需要的朋友可以参考下2022-04-04
最新评论