创新的品牌网站建设,网博士自助建站系统,潍坊网络营销招聘,酒店网站设计当需要创建的子进程数量不多时#xff0c;可以直接利用multiprocessing中的Process动态成生多个进程#xff0c;但如果是上百甚至上千个目标#xff0c;手动的去创建进程的工作量巨大#xff0c;此时就可以用到multiprocessing模块提供的Pool方法。初始化Pool时#xff0c…当需要创建的子进程数量不多时可以直接利用multiprocessing中的Process动态成生多个进程但如果是上百甚至上千个目标手动的去创建进程的工作量巨大此时就可以用到multiprocessing模块提供的Pool方法。初始化Pool时可以指定一个最大进程数当有新的请求提交到Pool中时如果池还没有满那么就会创建一个新的进程用来执行该请求但如果池中的进程数已经达到指定的最大值那么该请求就会等待直到池中有进程结束才会用之前的进程来执行新的任务请看下面的实例import multiprocessingimport timeimport osimport randomdef test1(msg):t_starttime.time()print(%s开始执行进程号为%d %(msg, os.getpid()))time.sleep(1)t_stoptime.time()print(%s执行完成耗时%.2f % (msg, t_stop -t_start))if __name__ __main__:po multiprocessing.Pool(3)for i in range(0, 10):# Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))# 每次循环将会用空闲出来的子进程去调用目标po.apply_async(test1, (i,))print(-----start-----)po.close() # 关闭进程池关闭后po不再接收新的请求po.join() # 等待po中所有子进程执行完成必须放在close语句之后print(-----end-----)outputsmacnameMacdeMacBook-Pro py %python3 cccccc.py-----start-----0开始执行进程号为542931开始执行进程号为542942开始执行进程号为542950执行完成耗时1.001执行完成耗时1.002执行完成耗时1.003开始执行进程号为542954开始执行进程号为542945开始执行进程号为542933执行完成耗时1.006开始执行进程号为542955执行完成耗时1.004执行完成耗时1.007开始执行进程号为542938开始执行进程号为542948执行完成耗时1.006执行完成耗时1.007执行完成耗时1.009开始执行进程号为542939执行完成耗时1.00-----end-----macnameMacdeMacBook-Pro py %multiprocessing.Pool常用函数解析apply_async(func[, args[, kwds]]) 使用非阻塞方式调用func(并行执行堵塞方式必须等待上一个进程退出才能执行下一个进程)args为传递给func的参数列表kwds为传递给func的关键字参数列表close()关闭Pool使其不再接受新的任务terminate()不管任务是否完成立即终止join()主进程阻塞等待子进程的退出 必须在close或terminate之后使用进程池中的Queue#如果要使用Pool创建进程就需要使用multiprocessing.Manager()中的Queue()而不是multiprocessing.Queue()否则会得到一条如下的错误信息RuntimeError: Queue objects should only be shared between processes through inheritance.下面的实例演示了进程池中的进程如何通信import osimport multiprocessingimport timedef write(q):print(write启动(%s)父进程为(%s) %(os.getpid(), os.getppid()))for i in python:q.put(i)def read(q):print(read启动(%s)父进程为(%s) %(os.getpid(), os.getppid()))for i inrange(q.qsize()):print(read从Queue获取到消息%s % q.get(True))if __name__ __main__:print((%s) start %os.getpid())qmultiprocessing.Manager().Queue()pomultiprocessing.Pool()po.apply_async(write, args(q,))time.sleep(2)po.apply_async(read, args(q,))po.close()po.join()print((%s) end % os.getpid())outputsmacnameMacdeMacBook-Pro py %python3 cccccc.py(54303) startwrite启动(54305)父进程为(54303)read启动(54306)父进程为(54303)read从Queue获取到消息pread从Queue获取到消息yread从Queue获取到消息tread从Queue获取到消息hread从Queue获取到消息oread从Queue获取到消息n(54303) endmacnameMacdeMacBook-Pro py %