Python异步进程池示例,同时可接收返回值
1、import multiprocessing as mp
from time import sleep
import os
def work(msg):
sleep(2)
print(msg)
return 'worker return' + msg #为函数调用返回相关值
if __name__ == '__main__':
pool = mp.Pool(processes = 4)
result = []
for i in range(10):
msg = "hello %d"%i
r = pool.apply_async(work,(msg,))#向进程池中加入要执行的事件
result.append(r)
#关于多线程执行的时候返回值是有序的原因说明:因为多线程只是执行的时候顺序是无序的,但是加入时是用for 有序插入,返回的对象在for的每次循环中顺序插入新列表,所以也是有序的。
for res in result:
print(res.get())
pool.close() #关闭进程池事件加入通道,即不能再向进程池中加入事件
pool.join() #阻塞等等进程池处理事件结束后回收进程池
2、参数说明:
apply_async(func,args,kwds)
功能: 以异步的方式将要执行的事件放入进程池(异步:放入进程池后无顺序执行
)
参数:
func : 要执行的函数
args : 给函数按位置传参
kwds : 给函数按照键值传参
返回值 : 返回事件执行后的返回值对象,可以通过调用get() 函数获取事件函数return的内容
Pool()
功能:创建进程池
返回值类型:进程池对象
参数<1>的名称为(processes=整数型)用于设置进程池中进程的数量。