Python 进程,进程池

注意:进程池中的进程如果发生异常时,主进程中并不会得到异常提示。

如果进程池中的进程要使用队列(Queue)实现进程间通信,必须使用queue = multiprocessing.Manager().Queue() 的方式创建队列(需要先导入multiprocessing模块)。

demo.py(进程池):

# -*- coding:utf-8 -*-
from multiprocessing import Pool
import os, time, random

def worker(msg):
    t_start = time.time()
    print("%s开始执行,进程号为%d" % (msg,os.getpid()))
    # random.random()随机生成0~1之间的浮点数
    time.sleep(random.random()*2) 
    t_stop = time.time()
    print(msg,"执行完毕,耗时%0.2f" % (t_stop-t_start))


po = Pool(3)  # 定义一个进程池,最大进程数3

# 向进程池中循环添加10个任务
for i in range(0,10):
    # Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))
    # 每次循环将会用空闲出来的子进程去调用目标
    po.apply_async(worker,(i,))  # 向进程池中添加进程任务

print("----start----")
po.close()  # 关闭进程池,关闭后po不再接收新的任务请求
po.join()  # 等待po进程池中所有子进程执行完成,必须放在close语句之后 (主进程结束后,进程池就会结束,进程池中的任务也会结束。 所以在结束主进程之前,先等待进程池中的任务执行完成)
print("-----end-----")

猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/84337990