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 translator使用实例
Sep 06 Python
用Python设计一个经典小游戏
May 15 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
Python中pass的作用与使用教程
Nov 13 Python
在 Python 中使用 7zip 备份文件的操作
Dec 11 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 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
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
angular.bind使用心得
2015/10/26 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
实例讲解python中的协程
2018/10/08 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
保安员岗位职责
2013/11/17 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
一年级小学生评语
2014/04/22 职场文书
交通志愿者活动总结
2014/06/27 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
五好家庭事迹材料
2014/12/20 职场文书
监理中标通知书
2015/04/16 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫