11.python并发入门(part9 多进程模块multiprocessing基本用法)
一、回顾多继承的概念。
由于GIL(全局解释器锁)的存在,在python中无法实现真正的多线程(一个进程里的多个线程无法在cpu上并行执行),如果想充分的利用cpu的资源,在python中需要使用进程。
二、multiprocessing模块的简介。
multiprocessing是python中用来管理多进程的包,与threading用法非常类似,它主要使用multiprocessing.Process对象来创建一个进程对象,该进程可以运行在python的函数中。
该Process(进程)对象与Thread(线程)对象的用法基本相同,同样具有start,join,run之类的方法,此外,multiprocessing也具有event,Lock,Semaphore,Condition类,这些对象可以像多线程那样,通过参数传递给各个进程。
其用法与threading包中的同名类一致。所以,multiprocessing的很大一部份与threading使用同一套API,只不过换成了多进程。
三、多进程的调用方式。
方式1:
#!/usr/local/bin/python2.7
# -*- coding:utf-8 -*-
from multiprocessing import Process
import time
def func1(name):
print 'hello %s,%s' %(name,time.ctime())
time.sleep(1)
if __name__ == '__main__':
pro_list = []
for i in range(3):
p = Process(target=func1,args=str(i))
pro_list.append(p)
p.start()
for i in pro_list:
i.join()
print "ending...."
方式2:(通过类的方式来创建多进程。)
#!/usr/local/bin/python2.7
# -*- coding:utf-8 -*-
from multiprocessing import Process
import time
class myprocess(Process):
def __init__(self):
super(myprocess, self).__init__()
def run(self):
print "hello,%s,%s" %(self.name,time.ctime())
time.sleep(1)
if __name__ == '__main__':
pro_list = []
for i in range(3):
p = myprocess()
p.start()
pro_list.append(p)
for p in pro_list:
p.join()
print "ending!"
下面还有一个扩展示例,可以瞬间让你明白,父进程与子进程之间的关系。
#!/usr/local/bin/python2.7
# -*- coding:utf-8 -*-
from multiprocessing import Process
import time
import os
def info(title):
print "title:%s" %(title)
print "parent process:%s", os.getppid() #获得父进程的进程号也就是ppid
print "process id: %s", os.getpid() #获得当前进程的pid号
def func1(name):
info("func1")
print "hello %s" %(name)
if __name__ == '__main__':
info("main process")
time.sleep(1)
print "------------------"
p = Process(target=info,args=('su',))
p.start()
p.join()
输出结果:
title:main process
parent process:%s 40833 #主进程的父进程是pycharm,所以这个是pycharm的进程号
process id: %s 42454 #我们运行的py程序的进程号
------------------
title:su
parent process:%s 42454 #在主进程中又开了个子进程,所以这个子进程的父进程就是我们运行py文件的主进程号
process id: %s 42455 #子进程自己的pid。
三、Process类的常用属性以及方法的介绍。
Process类在实例化对象的时候,都需要哪些参数?
Process([group [, target [, name [, args [, kwargs]]]]])
group:这个参数应该是指定一个进程组,这个参数的功能暂时还没有实现,所以必须是None(默认就是None)
target:这个进程所要执行的函数或者方法。
name:指定进程名 (也可以用来获取进程名)
args/kwargs:要传到函数里的参数。
2.关于进程对象的一些常用方法。
is_alive(): 返回这个进程是否在运行状态。
join(timeout):阻塞父进程,一直到这个子进程终止。
start():开启这个进程,等待cpu调度。
terminate() 直接对这个进程发起一个SIGTERM信号,立刻终止这个进程。
3.进程类的一些常用属性。
deamon (注意!这是一个property特殊属性,本质上是个函数)daemon属性用来创建一个守护进程。 (这个守护进程是用于守护父进程的,当父进程退出,这个守护进程也会退出。)
name 获得进程名。
pid 获得进程号。
转载于:https://blog.51cto.com/suhaozhi/1925631
相关文章:

将不确定变为确定~Flag特性的枚举是否可以得到Description信息
回到目录 之前我写过对于普通枚举类型对象,输出Description特性信息的方法,今天主要来说一下,如何实现位域Flags枚举元素的Description信息的方法。 对于一个普通枚举对象,它输出描述信息是这样的 public enum Status{[Descriptio…
中科大“九章”历史性突破,但实现真正的量子霸权还有多远?
作者 | 马超 出品 | AI科技大本营 头图 | CSDN下载自视觉中国 10月中旬,政府高层强调要充分认识推动量子科技发展的重要性和紧迫性,加强量子科技发展战略谋划和系统布局,把握大趋势,下好先手棋。 今天,我国的量子科技领…

php析构函数的用法
简单的说,析构函数是用来在对象关闭时完成的特殊工作,比如我写的上例,在实例化同时打开某文件,但是它什么时候关闭呢,用完就关闭呗,所以析构函数直接关闭它, 又或者在析构时,我们将处理好的某些数据一并写进数据库,这时可以考虑使用析构函数内完成,在析构完成前,这些对象属性仍…

泛型中? super T和? extends T的区别
经常发现有List<? super T>、Set<? extends T>的声明,是什么意思呢?<? super T>表示包括T在内的任何T的父类,<? extends T>表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。 …

两大AI技术集于一身,有道词典笔3从0到1的飞跃
作者 | Just 出品 | AI科技大本意(ID:rgznai100) “双十一”结束的钟点刚刚敲响,拥有电子消费品的企业便很快对外界秀了一把今年的销售战绩,网易有道也不例外。在电子词典单品品类榜单上,有道词典笔稳稳拿下天猫和京东…

VIM进阶功能
2019独角兽企业重金招聘Python工程师标准>>> http://www.cnblogs.com/gunl/archive/2011/08/15/2139588.html 该网页上介绍了以下内容: 查找快速移动光标复制、删除、粘贴数字命令组合快速输入字符替换多文件编辑宏替换TABautocmd常用脚本常用配置另一篇…

最简便的清空memcache的方法
如果要清空memcache的items,常用的办法是什么?杀掉重启?如果有n台memcache需要重启怎么办?挨个做一遍? 很简单,假设memcached运行在本地的11211端口,那么跑一下命令行: $ echo ”f…

mongodb启动
将mongodb安装为Windows服务,让该服务随Windows启动而启动: 开启服务: 转载于:https://www.cnblogs.com/dabinglian/p/6861413.html
赠书 | AI 还原宋代皇帝,原来这么帅?!
整理 | 王晓曼来源 | 程序人生 (ID:coder _life)封图 | 大谷视频《人工智能还原的宋代皇帝,原来这么帅?!》*文末有赠书福利昨日,一条“人工智能还原的宋代皇帝”喜提热搜,博主大谷借…

Deep learning:三十六(关于构建深度卷积SAE网络的一点困惑)
前言: 最近一直在思考,如果我使用SCSAE(即stacked convolution sparse autoendoer)算法来训练一个的deep model的话,其网络的第二层开始后续所有网络层的训练数据从哪里来呢?其实如果在这个问题中ÿ…

用memcache.php监测memcache的状况
最新的memcache pecl中,新增了一个memcache.php,这个php文件可以用来方便的查看memcache的状况,界面上与apc自带的apc.php风格一致。 如图: 应该算是最方便的监测memcache的办法了。 memcache.php源文件下载 是一个PHP源文件,…

想知道垃圾回收暂停的过程中发生了什么吗?查查垃圾回收日志就知道了!
\关键点\垃圾回收日志中包括着一些关键性能指标; \要做一次正确的垃圾回收分析需要收集许多数据,所以好的工具是非常必要的; \除了垃圾回收之外还有很多事件都可能会让应用程序暂停; \让你的应用程序暂停的事件也会让垃圾回收器暂…

Linux必学的网络操作命令
因为Linux系统是在Internet上起源和发展的,它与生俱来拥有强大的网络功能和丰富的网络应用软件,尤其是TCP/IP网络协议的实现尤为成熟。Linux的网络命令比较多,其中一些命令像ping、ftp、telnet、route、netstat等在其它操作系统上也能看到&am…
丢弃Transformer,FCN也可以实现E2E检测
作者 | 王剑锋来源 | 知乎CVer计算机视觉专栏我们基于FCOS,首次在dense prediction上利用全卷积结构做到E2E,即无NMS后处理。我们首先分析了常见的dense prediction方法(如RetinaNet、FCOS、ATSS等),并且认为one-to-ma…

Linux命令基础--uname
uname 显示系统信息 语 法:uname [-amnrsvpio][--help][--version] 补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。 参 数: -a或-all 详细输出所有信息,依次为内核名称,主机名&am…

FEC之我见一
顾名思义,FEC前向纠错,根据收到的包进行计算获取丢掉的包,而和大神沟通的结果就是 纠错神髓:收到的媒体包冗余包 > 原始媒体包数据 直到满足 收到的媒体包 冗余包 > 原始媒体包数据 则进入恢复模式,恢复出…

改变Repeater控件中按钮颜色
昨晚有在论坛看到一帖,手上的工作一直忙到现在,Insus.NET现在抽点时间尝试实现它。 Insus.NET没有使用数据库作为数据源,而是使用List<T>作为数据源。因此你在这篇博文中学到很多有关泛型的知识。另外Insus.NET使用CheckBoxList来替代多…
CSDN湘苗培优,遇见更好的自己
CSDN 湘苗培优报名火热进行中!JOIN US号外!号外!“湘苗培优”报名火热进行中!????????????????????????为什么要报名“湘苗培优”只要你想学,这里有CSDN技术认证、企业导师零距离技术交流求职…

两个无序单链表,排序后合并成一个有序链表
两个无序单链表,排序后合并成一个有序链表算法思想:用冒泡法,对链表1和2进行排序,对排序后的两个链表,从小到大进行循环,装入链表3中。#include<stdio.h>#include<stdlib.h>struct stud/*定义链…

FEC之我见三
继续上文讲解: 3)标准的RTP头结构如下所示: 其中第一个字节中的x标志位是否扩展了RTP头,RTP协议允许用户自定义的扩展,扩展的字段紧挨上述RTP固定头。RTP扩展投中承载如下信息:1).当前包所在的Group组序号&…

集体智慧及其常用算法
集体智慧定义是指由许多的个体通过合作与竞争中所显现出来的智慧,集体智慧是一种共享的或者群体的智能。它是从许多个体的合作与竞争中涌现出来的。集体智慧在细菌、动物、人类以及计算机网络中形成,并以多种形式的协商一致的决策模式出现。常用算法如下…
带你「周游世界」的 MODNet 算法
来源 | Jack Cui责编 | 晋兆雨头图 | CSDN下载自视觉中国最近又有一个算法火了,不知道你们看到没?直接看效果!效果这么稳定的人像 Image Matting 算法真的不多,并且还能进行实时处理!处理视频、图像,不在话…

ASP.NET格式化日期
1.绑定时格式化日期方法: <ASP:BOUNDCOLUMN DATAFIELD "JoinTime " DATAFORMATSTRING "{0:yyyy-MM-dd} " > <ITEMSTYLE WIDTH "18% " > </ITEMSTYLE &g…

docker的网络架构配置
http://xiaorenwutest.blog.51cto.com docker 网络架构模默认情况下,容器可以建立到外部网络的连接,但是外部网络无法连接到容器。Docker 允许通过外部访问容器或容器互联的方式来提供网络服务外部访问容器:容器中可以运行一些网络应用,要让外…
【官方福利】CSDN内测师限时申请,参与赢年末礼包
各位程序猿们都下载CSDN官方出品的插件了吧?什么?还有不知道插件是什么的同学??你错过了太多!更酷更高效的浏览器插件,一键万能操作,新标签页极简个性,让你的工作效率UP UP UP&#…

Sql年月日计算方法
通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几…

读《每天懂一点成功概率学》
概率出现某种结果的数量/出现所有结果的数量 所谓“数学概率”,就是理论上计算出来的概率,例如抛硬币时,只有正面和反面两种结果,因此正面出现的概率就是1/2。 另一方面,我们反复抛硬币,根据实际结果计算出…

AV1时代要来了,超高清视频时代视频编码技术的机遇与挑战
近些年随着视频行业的迅猛发展,尤其像短视频、点播、直播、VR等领域的爆发,人们对于高清、超高清视频体验的追求越来越强烈,流媒体平台如何在提升观众观看体验,同时降低播放成本,利用技术降低带宽消耗的同时又能最大化…

敏捷软件开发(c#版)文摘
第一部分 敏捷开发 第1章 敏捷实践 第2章 极限编程概述 第3章 计划 第4章 测试 第5章 重构 第6章 一次编程实践 第二部分 敏捷设计 第7章 什么是敏捷设计 第8章 SRP 第9章 OCP 第10章 LSP 第11章 DIP 第12章 ISP 第13章 C#程序员UML概观 第三部分 薪水支付案例研究 第四部分 打…

asp.net 2.0 中GridView里设置日期格式
在asp.net 1.0 中的datagrid 中 设置日期字段格式时用 DataFormatString"{0:yyyy-MM-dd}"即可。在gridview 中设置短日期格式 使用<asp:BoundField HeaderText"发表时间" DataField"PostTime" DataFormatString"{0:yyyy-MM-dd}" &g…