python apply_async
IT之一小佬 人气:0前言:
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()关闭它。
加载全部内容