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处理PHP数组文本文件实例
Sep 18 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
Sep 11 Python
浅析Python装饰器以及装饰器模式
May 28 Python
python 3.6.5 安装配置方法图文教程
Sep 18 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
超简单使用Python换脸实例
Mar 27 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
详解使用Python下载文件的几种方法
Oct 13 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
Python super()函数使用及多重继承
May 06 Python
keras得到每层的系数方式
Jun 15 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
PHP面向对象概念
2011/11/06 PHP
PHP小教程之实现链表
2014/06/09 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
PHP实现八皇后算法
2019/05/06 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
[56:20]LGD vs VP Supermajor 败者组决赛 BO3 第三场 6.10
2018/07/04 DOTA
python2.7的编码问题与解决方法
2016/10/04 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
在python中求分布函数相关的包实例
2020/04/15 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
浅析NumPy 切片和索引
2020/09/02 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
出纳岗位职责范本
2013/12/01 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书