multiprocessing.Process() ----------python中的多进程
python 当中 使用封装好的 multiprocessing 为我们实现创建多进程任务。
1 Process()方法创建子进程
使用multiprocessing.Process() 方法产生一个子进程
基本过程如下:
from multiprocessing import Process
import os
from time import sleep
# 1 指定一个功能,绑定给子进程去完成
def proc_fun(age ):
sleep(3)
print("我是子进程%s,age=%s"%( os.getpid() , age ) ) if __name__ =="__main__":
# 2 创建一个进程实例对象
#Process() 接收target 代表绑定要完成的函数,不绑定默认执行run方法,第二个元组是传入置顶函数的参数列表,
# 还可以选择性传参 name代表新建的子进程名字,还可以传入一个字典
p = Process( target=proc_fun ,args=( 18, ),name="哈哈1号子进程" )
# 3 用start() 方法将进程创建出来并且运行
print("子进程开始执行。。。。")
p.start()
print("子进程已开启%s。。。。"%p.name)
print("开启阻塞收集。。。")
p.join()#用join()方法回收子进程的资源,可以传入参数多久后回收
# 默认是阻塞回收,代表运行完成后再回收该进程的资源 等待期间主进程不继续向下进行
print("收集结束")
2 创建多个子进程的垃圾回收:
父进程可以生成子进程,子进程再生成子进程,局面很混乱
因为子进程的资源回收全是父进程接管的。如果父进程没有回收资源,那么子进程就会丢给1号pid的进程去管理
所以我们大量生成子进程的时候,要用父进程去生成,然后用父进程进行回收子进程的资源
from multiprocessing import Process
import os # 1 定义一个子进程需要完成的功能
def proc_fun( num ,m ):
print("我是子进程%s,我是第%s号被创建的 m=%s"%(os.getpid(),num , m))
if __name__ == "__main__":
# 2 声明一个子进程的对象,循环调用 用一个父进程生成多个子进程
jobs = []
for i in range(10):
p = Process(target=proc_fun , args=(i,) ,kwargs={ "m":15 })
p.start()
jobs.append(p ) print("进程开启结束,下面进行收集资源") for job in jobs:
job.join()
print("已经释放了:%s"%(p.name ) )
3 Process函数常用的参数、属性:
Process语法结构如下:
Process([group [, target [, name [, args [, kwargs]]]]])
target:表示这个进程实例所调用对象;
args:表示调用对象的位置参数元组;
kwargs:表示调用对象的关键字参数字典;
name:为当前进程实例的别名;
group:大多数情况下用不到;
Process类常用方法:
is_alive():判断进程实例是否还在执行;
join([timeout]):是否等待进程实例执行结束,或等待多少秒;
start():启动进程实例(创建子进程);
run():如果没有给定target参数,对这个对象调用start()方法时,就将执行对象中的run()方法;
terminate():不管任务是否完成,立即终止;
Process类常用属性:
name:当前进程实例别名,默认为Process-N,N为从1开始递增的整数;
pid:当前进程实例的PID值;
4 用类来实现创建进程对象:
我们可以定义一个类,继承Process
实例化一个对象的时候,就会创建一个子进程
关键点是重写父类的run方法 调用start的时候默认调用run方法
from multiprocessing import Process
# 自己写一个类 继承在Process
class Proc( Process ):
#实际上在调用子进程的start() 的时候,默认会执行run() 方法
# 所以要把主要的逻辑写在run方法当中
def run(self):
self.sing() def sing(self):
print("正在唱歌!。。。") if __name__ == "__main__":
p = Proc()
print("子进程开始执行:")
p.start()
p.join()
multiprocessing.Process() ----------python中的多进程的更多相关文章
- Python中使用多进程来实现并行处理的方法小结
进程和线程是计算机软件领域里很重要的概念,进程和线程有区别,也有着密切的联系,先来辨析一下这两个概念: 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和 ...
- 聊聊Python中的多进程和多线程
今天,想谈一下Python中的进程和线程. 最近在学习Django的时候,涉及到了多进程和多线程的知识点,所以想着一下把Python中的这块知识进行总结,所以系统地学习了一遍,将知识梳理如下. 1. ...
- 深入浅析python中的多进程、多线程、协程
深入浅析python中的多进程.多线程.协程 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源 ...
- 关于python中的多进程模块multiprocessing
python中的multiprocessing是一个多进程管理包,主要作用也就是提供多进程,而不是多线程,在其中用的比较多估计也就是Process和Pipe两个类,如下代码所示: #!/usr/bin ...
- Python中的多进程:fork和multiprocessing
Python的多进程 套路1:os.fork() 先敲段代码: #!/usr/bin/env python3 import os os.fork() print('1111111111') 执行结果: ...
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- 学习笔记--python中使用多进程、多线程加速文本预处理
一.任务描述 最近尝试自行构建skip-gram模型训练word2vec词向量表.其中有一步需要统计各词汇的出现频率,截取出现频率最高的10000个词汇进行保留,形成常用词词典.对于这个问题,我建立了 ...
- Python中的多进程、多线程和协程
本文中的内容来自我的笔记.撰写过程中参考了胡俊峰老师<Python程序设计与数据科学导论>课程的内容. 并发处理:多进程和多线程 前置 概念: 并发:一段时间内同时推进多个任务,但不一定要 ...
- python中的多进程处理
转载于:http://blog.csdn.net/jj_liuxin/article/details/3564365 帮助文档见https://docs.python.org/2.7/library/ ...
随机推荐
- phpstorm激活码生成器地址
http://idea.qinxi1992.cn/ 写在windows/system32/drivers/etc/hosts里 0.0.0.0 account.jetbrains.com 激活码位置: ...
- 关于js高度和宽度的获取 ----2017-03-29
来源:百度 对错有待实践检验 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: docu ...
- Docker基础知识整理
Docker 1.安装2.三大组件 镜像/容器/仓库3.Docker数据管理4.构建Docker5.docker部署微服务 项目部署到Linux服务器 1.安装jdk2.安装tomcat3.将项目wa ...
- kafka概念使用简介注意点
使用场景 大数据量.低并发.高可用.订阅消费场景 概念理解 分区个数与消费者个数 分区个数 = 消费者个数 :最合适状态 分区个数 > 消费者个数 :某些消费者要承担更多的分区数据消费 分区个数 ...
- 忘记root密码---单用户模式进入及操作
修改root密码----------------单用户模式操作 个人原创博客,转载请注明,否则追究法律责任 1,开机后,迅速按下任意键 2,选择第二个:内核,按e 3,在quient后面按空格 1 或 ...
- FNV算法实战
HASH算法介绍 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长 ...
- [POJ 3764] The xor-longest Path
Description 多组数据 给你一颗树, 然后求一条最长异或路径, 异或路径长度定义为两点间简单路径上所有边权的异或和. Solution 首先 dfs 一遍,求出所有的点到根节点(随便选一个) ...
- servlet的执行过程
第一次访问servlet的过程: 服务器启动:在服务器启动的时候,加载项目,就扫描web.xml文件,获得应用有哪些servlet,url-pattern, 客户端通过URl访问服务器[向服务器发送一 ...
- thinkphp5 taglib自定义标签教程
学着写了一下,终于搞定了,顺便分享一下!taglib是tp框架自定义标签功能,如果你用过cms,肯定见过类似: {dede:arclist typeid='' row='' col='' titlel ...
- Linux下mysql的常用操作
Linux下mysql的常用操作: 显示数据库 show databases; 选择数据库 use 数据库名; 显示数据库中的表 show tables; 显示数据表的结构 describe 表名; ...