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/ ...
随机推荐
- VM及centOS系统安装
虚拟机安装linux及配置
- centos7的服务管理
1,启动服务(每条都可以)systemctl start httpdsystemctl start httpd.serviceservice httpd start 2,停止服务systemctl s ...
- 笔记:I/O流-字符集
Java 库的 java.nio 包用 Charset 类统一了对字符集的转换,支付姐建立了两个字节Unicode码元序列与使用本地字符编码方式的字节序列之间的映射,Charset类使用的时由IANA ...
- Session 的原理及最佳实践
Http协议是基于请求和响应的一种无状态的协议,而通过session可以使得Http应用变得有状态,即可以"记住"客户端的信息.今天就来说说这个session和cookie. Se ...
- iptables.sh 初始化防火墙配置
#!/bin/bash iptables -F iptables -X iptables -Z iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT ...
- Jmeter返回参数值写入文件《一》
在用Jmeter做自动化测试的时候,某些特殊情况下我们需要将Jmeter的返回的某个特殊值写入的文件中,那么我们该如何做呢? 对于Jmeter这个工具来说,我们不难知道,它是一个java开源的可扩展的 ...
- Python中安装模块的方法
1.*nix系统上有一个地方专门有一个地方来放置安装的Python模块 比如在Mac上,这个目录的路径为: /usr/lib/python2.7 将要安装的文件拷贝到这里即可 2.下载模块包,解压后, ...
- 第 8 章 IO库
第 8 章 IO库 标签: C++Primer 学习记录 IO库 第 8 章 IO库 8.1 IO类 8.2 文件输入输出 8.1 string流 8.1 IO类 IO对象无拷贝或赋值,因此不能将形参 ...
- Beta Scrum博客集
听说 Beta Scrum Day 1
- Alpha冲刺No.10
一.站立式会议 我们的阿尔法冲刺也基本宣告血崩,虽然很多功能已经实现,但是并没有串联在一起,好在这周不需要上课,我们也能好好睡一觉 实现手机的定位系统 细化界面设计 解决数据库和软件交互的一些问题 二 ...