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. 使用Angular CLI从蓝本生成代码

    第一篇文章是: "使用angular cli生成angular5项目" : http://www.cnblogs.com/cgzl/p/8594571.html 这篇文章主要是讲生 ...

  2. Linux shell 基础

    目录 一.shell脚本的基本使用 1.语言规范 2.变量 3.重定向(>,>>) 二.运算符和常用判断 1.比较运算符 2.逻辑运算符 3.常用判断 三.程序结构 1.分支(if语 ...

  3. selenium 学习之路开始了,一遍搬一遍理解学习,加油!!!

    selenium 学习之路开始了,一遍搬一遍理解学习,加油!!!

  4. SpringMVC的工作流程以及组件说明

    1. SpringMVC处理流程 2. SpringMVC架构 2.1 框架结构 2.2 框架流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherSer ...

  5. npm5 packag-lock.json

    前几天升级了 Node.js v8.0 后,自带的 npm 也升级到了5.0,第一次使用的时候确实惊艳到了:原本重新安装一次模块要十几秒到事情,现在一秒多就搞定了.先不要激动,现在我来大概讲一下 np ...

  6. Redis TTL命令

    Redis TTL 命令以秒为单位返回 key 的剩余过期时间. redis TTL 命令基本语法如下: redis 127.0.0.1:6379> TTL KEY_NAME 当 key 不存在 ...

  7. 详细分析du和df的统计结果为什么不一样

    今天有个人问我du和df的统计结果为什么会不同.给他解析了一番,后来想想还是写篇文章从原理上来分析分析. 我们常常使用du和df来获取目录或文件系统已占用空间的情况.但它们的统计结果是不一致的,大多数 ...

  8. Algorithm --> 投资组和求最大利润

    投资组和求最大利润 题目: 投资人出资一笔费用mount,投资给不同的公司(A,B,C....),求最大获取利润? 例如:投资400百万,给出两家公司A和B: 1.如果投资一百万给A公司,投资3百万给 ...

  9. HIVE使用mysql作为外置数据库配置详情

    Hive安装配置(mysql) 安装mysql hadoop$:sudo apt-get update hadoop$:sudo apt-get install mysql-server 启动mysq ...

  10. Alpha冲刺Day12

    Alpha冲刺Day12 一:站立式会议 今日安排: 由黄腾飞和张梨贤继续完成政府人员模块下的风险管控子模块下的分级统计展示 由林静继续完成企业注册模块 由周静平完成登录页面模块 二:实际项目进展 人 ...