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中的多进程的更多相关文章

  1. Python中使用多进程来实现并行处理的方法小结

    进程和线程是计算机软件领域里很重要的概念,进程和线程有区别,也有着密切的联系,先来辨析一下这两个概念: 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和 ...

  2. 聊聊Python中的多进程和多线程

    今天,想谈一下Python中的进程和线程. 最近在学习Django的时候,涉及到了多进程和多线程的知识点,所以想着一下把Python中的这块知识进行总结,所以系统地学习了一遍,将知识梳理如下. 1. ...

  3. 深入浅析python中的多进程、多线程、协程

    深入浅析python中的多进程.多线程.协程 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源 ...

  4. 关于python中的多进程模块multiprocessing

    python中的multiprocessing是一个多进程管理包,主要作用也就是提供多进程,而不是多线程,在其中用的比较多估计也就是Process和Pipe两个类,如下代码所示: #!/usr/bin ...

  5. Python中的多进程:fork和multiprocessing

    Python的多进程 套路1:os.fork() 先敲段代码: #!/usr/bin/env python3 import os os.fork() print('1111111111') 执行结果: ...

  6. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  7. 学习笔记--python中使用多进程、多线程加速文本预处理

    一.任务描述 最近尝试自行构建skip-gram模型训练word2vec词向量表.其中有一步需要统计各词汇的出现频率,截取出现频率最高的10000个词汇进行保留,形成常用词词典.对于这个问题,我建立了 ...

  8. Python中的多进程、多线程和协程

    本文中的内容来自我的笔记.撰写过程中参考了胡俊峰老师<Python程序设计与数据科学导论>课程的内容. 并发处理:多进程和多线程 前置 概念: 并发:一段时间内同时推进多个任务,但不一定要 ...

  9. python中的多进程处理

    转载于:http://blog.csdn.net/jj_liuxin/article/details/3564365 帮助文档见https://docs.python.org/2.7/library/ ...

随机推荐

  1. RouterPassView——路由器密码查看工具

    大多数现代路由器都可以让您备份一个文件路由器的配置文件,然后在需要的时候从文件中恢复配置.路由器的备份文件通常包含了像您的ISP的用户名重要数据/密码,路由器的登录密码,无线网络的KEY. 如果你忘记 ...

  2. object转字符串

    1.obj.tostring() obj为空时,抛异常. 2.convert.tostring(obj) obj为空时,返回null: 3.(string)obj obj为空时,返回null:obj不 ...

  3. JDK配置及tomcat部署

    JDK配置及tomcat部署 2017-09-30-17:54:03 个人原创博客,转载请注明出处,作者,否则依法追究责任,文中引用了一些百度经验的图片,特此注明. 一,配置JDK:1.8.0_66版 ...

  4. python中干掉tornado的连接失败日志

    用了tornado真的是比较舒服,很多事都为你做好了. 但也有不令人满意的地方--对于我这个洁癖来说,自动给我的控制台打印不受我控制的信息是不能忍受的. 连接到一个新的地方,如果失败,tornado会 ...

  5. business expressions(一)

    一. 1.24/7 24/7 :twenty four hours a day, seven days a week I work 24/7.——meaing i work all the time. ...

  6. vs调试正确显示utf8格式字符串

    自从将visual studio从2010升级到2015后,发现调用接口的utf8格式字符串不能正常显示了,常常被莫名其妙截断,查了下,原来可以直接将变量拖到watch窗口中,在变量名后面手动添加,s ...

  7. 走近webpack(0)--正文之前的故事

    在前端工作的过程中,只要你接触过vue,angular,react,gulp就一定知道webpack或者听说过或者使用过webpack,但是或许你对webpack的使用方法并不是十分了解,只是会用写好 ...

  8. 【Python】 汉字转化汉语拼音pinyin

    pinyin pinyin模块是github上一个小项目,在github.com/cleverdeng/pinyin.py上面可以下到源码.衷心感谢那些为这个模块做出贡献的人来方便我们[鞠躬] 安装: ...

  9. OpenGL学习笔记:第一个OpenGL程序

    OpenGL环境搭建参考博客:VS2015下OpenGL库的配置. #include<GL\glew.h> #include<GLTools.h> #include<GL ...

  10. vue/axios请求拦截

    import axios from 'axios';import { Message } from 'element-ui';import Cookies from 'js-cookie';impor ...