python多进程操作实例


Posted in Python onNovember 21, 2014

由于CPython实现中的GIL的限制,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况我们需要使用多进程。 这也许就是python中多进程类库如此简洁好用的原因所在。在python中可以向多线程一样简单地使用多进程。

一、多进程

process的成员变量和方法:

>>class multiprocessing.Process([group[, target[, name[, args[, kwargs]]]]]) 来的定义类似于threading.Thread。target表示此进程运行的函数,args和kwargs表示target的参数。

>>name, pid

分别表示进程的名字,进程id。

>> daemon成员

daemon标志位bool变量,需要在start()调用前设置。daemon的初始值是从父进程继承而来。当一个进程结束的时候,它尝试去结束它的所有的daemon子进程。

注意:

daemon进程不允许创建子进程。否则当daemon进程结束的时候它的子进程不能被结束。

这里的daemon不是Unix的daemon进程,当父进程结束的时候所有的daemon子进程也将被终止(对于非daemon进程,父进程不等待非daemon的紫子进程,除非显示地对非daemon子进程使用join()方法)。

>>  exitcode

如果进程还没有退出,则为None,如果正确的退出则为0,如果有错误则为>0的错误代码,如果进程为终止则为-1*singal。 

>> start(), is_live(), terminate()

start()用来启动进程,is_live()用来查看进程的状态,terminate()用来终止进程。

>> run()

可以在process的子类中重载run()方法,从而设定进程的任务。重载process是构造新进程的另一种方式,一定程度上上等价于process的target参数。

multiprcessing的静态方法:

>>  multiprocessing.cpu_count()

用来获得当前的CPU的核数,可以用来设置接下来子进程的个数。

>>  multiprocessing.active_children()

用来获得当前所有的子进程,包括daemon和非daemon子进程。

实例:

import multiprocessing

import time

import sys
def worker(num):

    p = multiprocessing.current_process()

    print ('Starting:' + p.name + ":" + str(p.pid))

    print(str(num))

    sys.stdout.flush()

    print ('Exiting :' + p.name + ":" + str(p.pid))

    sys.stdout.flush()
def daemon():

    p = multiprocessing.current_process()

    print ('Starting:' + p.name + ":" + str(p.pid))

    sys.stdout.flush()

    time.sleep(10)

    print ('Exiting :' + p.name + ":" + str(p.pid))

    sys.stdout.flush()

    

def non_daemon():

    p = multiprocessing.current_process()

    print ('Starting:' + p.name + ":" + str(p.pid))

    sys.stdout.flush()

    time.sleep(20)

    print ('Exiting :' + p.name + ":" + str(p.pid))

    sys.stdout.flush()

    

if __name__ == '__main__':

    w = multiprocessing.Process(name='worker', target=worker, args=(100,))

    d = multiprocessing.Process(name='daemon', target=daemon)

    d.daemon = True

    nd = multiprocessing.Process(name='non-daemon', target=non_daemon)

    w.start()

    d.start()

    nd.start()

    

    print("the number of CPU is " + str(multiprocessing.cpu_count()))

    print("All children processes:")

    for p in multiprocessing.active_children():

        print("child:" + p.name + ":" + str(p.pid))

    print()

    

    w.join()

    #d.join()

运行结果:

python多进程操作实例

可以从上面的例子看到没有多非daemon子进程使用join()方法,结果父进程没有等待非daemon进程结束就退出了。

Python 相关文章推荐
python调用cmd命令行制作刷博器
Jan 13 Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 Python
Python字符串、元组、列表、字典互相转换的方法
Jan 23 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
python numpy 显示图像阵列的实例
Jul 02 Python
浅谈python3.x pool.map()方法的实质
Jan 16 Python
python web框架 django wsgi原理解析
Aug 20 Python
python并发编程 Process对象的其他属性方法join方法详解
Aug 20 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
用python实现监控视频人数统计
May 21 Python
Python多进程通信Queue、Pipe、Value、Array实例
Nov 21 #Python
Python多进程同步Lock、Semaphore、Event实例
Nov 21 #Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 #Python
Python pickle类库介绍(对象序列化和反序列化)
Nov 21 #Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
Nov 21 #Python
Python实现的下载8000首儿歌的代码分享
Nov 21 #Python
Python常用模块介绍
Nov 21 #Python
You might like
js tab 选项卡
2009/04/26 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
javascript 自定义事件初探
2009/08/21 Javascript
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
jquery 3D球状导航的文章分类
2010/07/06 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
微信小程序自定义胶囊样式
2020/12/27 Javascript
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
Numpy数组的保存与读取方法
2018/04/04 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
应聘教师自荐信
2013/10/12 职场文书
《燕子专列》教学反思
2014/02/21 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
寒假致家长的一封信
2015/10/10 职场文书