网络编程
位置:首页>> 网络编程>> Python编程>> python多进程使用apply_async的使用方法详解

python多进程使用apply_async的使用方法详解

作者:IT之一小佬  发布时间:2022-11-14 16:08:50 

标签: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()

运行结果:

python多进程使用apply_async的使用方法详解

在使用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()

运行结果:

python多进程使用apply_async的使用方法详解

注意:join()等待所有子进程结束后再运行,使用join()前先使用close()关闭它。

来源:https://blog.csdn.net/weixin_44799217/article/details/126860696

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com