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之大话题小函数(2)
Oct 10 Python
Python性能优化技巧
Mar 09 Python
python实现带声音的摩斯码翻译实现方法
May 20 Python
Python正则表达式知识汇总
Sep 22 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 Python
详解关于Django中ORM数据库迁移的配置
Oct 08 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
pytorch 模型可视化的例子
Aug 17 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
May 31 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
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
php查询ip所在地的方法
2014/12/05 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
django框架模板语言使用方法详解
2019/07/18 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
python实现三种随机请求头方式
2021/01/05 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
公司财务总监岗位职责
2013/12/14 职场文书
职工运动会感言
2014/02/07 职场文书
学生自我评语大全
2014/04/18 职场文书
授权委托书样本
2014/09/25 职场文书
仲裁协议书
2014/09/26 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
超市员工辞职信范文
2015/05/12 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers