运用pool进程池启动大量子进程
# Pool进程池类
from multiprocessing import Pool
import os
import time
import random def run(index):
print("子进程%s启动----进程ID:%s"%(index, os.getpid()))
t1 = time.time()
time.sleep(random.random()*5)
t2 = time.time()
print("子进程%s结束----进程ID:%s--耗时:%2f" % (index, os.getpid(),t2-t1)) if __name__ == "__main__":
print("启动主进程") #利用进程池类创建进程池对象
#参数:表示可以同时执行的进程数量
#由于pool的默认值为CPU核心数,如果有4个核心,则至少需要5个子进程才能看到结果
#Pool()里面的参数为数字,代表同时几个子进程一起执行任务
pool = Pool()
for i in range(8):
#创建子进程并放入进程池中统一管理
#参数为要执行的任务,和给任务传的参数
pool.apply_async(run, args=(i,)) #进程池对象调用join()之前必须先调用close(),意思是关闭进程池,调用close()之后就不能再把创建出来的子进程中,放入到进程池中统一管理了
pool.close()
#pool对象调用join方法,主进程会等待进程池中所有的子进程结束在执行主进程
pool.join() print("结束主进程")
启动主进程
子进程0启动----进程ID:11836
子进程1启动----进程ID:3828
子进程2启动----进程ID:4328
子进程3启动----进程ID:14076 #由此能看出同时运行4个子进程,每结束一个子进程,然后开启一个子进程,并且一直保持4个子进程同时运行,运维pool()的参数默认为核心的数量,是可以自定义的
子进程2结束----进程ID:4328--耗时:0.921062
子进程4启动----进程ID:4328
子进程1结束----进程ID:3828--耗时:1.192999
子进程5启动----进程ID:3828
子进程4结束----进程ID:4328--耗时:1.110084
子进程6启动----进程ID:4328
子进程3结束----进程ID:14076--耗时:2.043996
子进程7启动----进程ID:14076
子进程5结束----进程ID:3828--耗时:3.409121
子进程0结束----进程ID:11836--耗时:4.916067
子进程7结束----进程ID:14076--耗时:3.830013
子进程6结束----进程ID:4328--耗时:4.367969
结束主进程
运用pool进程池启动大量子进程的更多相关文章
- 0704 Process继承实现多进程、Pool进程池,进程间通过队列通信,Pool实现多进程实现复制文件
通过继承的方式,实现Process多进程 from multiprocessing import Process import time class MyNewProcess(Process): de ...
- (7)Pool进程池
(1)# 开启过多的进程并不一定提高你的效率 因为进程池可以实现并行的概念,比Process单核并发的速度要快 # 如果cpu负载任务过多,平均单个任务执行的效率就会低,反而降低执行速度. 1个人做4 ...
- 多进程-Pool进程池
from multiprocessing import Pool import os,time def Foo(i): time.sleep(2) print("in process&quo ...
- 结合Pool进程池进程,实现进程之间的通讯,稍微复杂的运用
#进程池中的Queue """ 如果要用Pool创建进程,就需要multiprocessing.Manager()中的Queue() 而不是multiprocessing ...
- 进程同步控制(锁,信号量,事件), 进程通讯(队列和管道,生产者消费者模型) 数据共享(进程池和mutiprocess.Pool模块)
参考博客 https://www.cnblogs.com/xiao987334176/p/9025072.html#autoid-1-1-0 进程同步(multiprocess.Lock.Semaph ...
- python学习笔记——multiprocessing 多进程组件 进程池Pool
1 进程池Pool基本概述 在使用Python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量时间,如果操作的对象数目不大时,还可以直接适用Process类动态生成 ...
- Python 之并发编程之manager与进程池pool
一.manager 常用的数据类型:dict list 能够实现进程之间的数据共享 进程之间如果同时修改一个数据,会导致数据冲突,因为并发的特征,导致数据更新不同步. def work(dic, lo ...
- Python 进程池
进程池: 每一个进程在启动一个子进程时都会克隆一分数据,并开启额外一份内存空间,如果多次开启子进程,对内存的开销比较大,这里可以通过进程池来控制进程的最大个数,来解决. 进程池中有两个方法: ap ...
- PHP-FPM进程池探秘
PHP 支持多进程而不支持多线程:PHP-FPM 在进程池中运行多个子进程并发处理所有连接请求.通过 ps 查看PHP-FPM进程池(pm.start_servers = 2)状态如下: root@d ...
随机推荐
- https://geewu.gitbooks.io/rabbitmq-quick/content/RabbitMQ%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C.html
https://geewu.gitbooks.io/rabbitmq-quick/content/RabbitMQ%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C.html
- Go的学习 sort
1.排序操作主要都在 sort包中,导入就可以使用了 2.sort.Ints对整数进行排序 package main; import ( "fmt" "sort" ...
- Flutter-底部導航欄切換
程序入口 import 'package:flutter/material.dart'; import 'botton_navigation_widget.dart'; void main() =&g ...
- SpringCloud-Nexfilx
1.概述 Spring Cloud Netflix provides Netflix OSS integrations for Spring Boot apps through autoconfigu ...
- VUE中使用canvas做签名功能,兼容IE
<template> <div> <div class="msgInput"> &l ...
- Python3 使用HTMLTestRunner.py 报错ImportError: No module named 'StringIO'处理方法
HTMLTestRunner.py文件是基于Python2的语法,python3使用需要修改语法: 1.>>> 94行 import io # import StringIO 2.& ...
- spring依赖搜索
spring项目在启动时,spring框架会根据名称自动搜索实现类. 这在日常开发中还是很有用的. 下面举两个例子. 1. 先写一个接口(或者抽象类) public interface IPerson ...
- 【Java】定义Logger为什么要用static和final?
private static final Logger logger= LoggerFactory.getLogger(ShiroConfig.class); (1)出于资源利用的考虑,Logger的 ...
- MISC_刷题笔记
图片隐写 png类型 查看文件头文件尾,更改长宽(bugku_隐写) zip类型 压缩包的多层嵌套,用strings看打印出来的是不是一个目录的样子(bugku_眼见非实)
- C# foreach和for比较
foreach优点: 1.语句更简洁 2.不需要强制类型转换(比如输出的时候要进行一下乘运算) 3.多维数组遍历只需一行代码 4.不用对索引进行检查 缺点: 1.不能对数据进行修改 参考:https: ...