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的Django框架可适配的各种数据库介绍
Jul 15 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
Jan 22 Python
Python学习笔记之open()函数打开文件路径报错问题
Apr 28 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
python加载自定义词典实例
Dec 06 Python
matplotlib subplot绘制多个子图的方法示例
Jul 28 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 Python
pytorch中index_select()的用法详解
Jan 06 Python
如何利用python创作字符画
Jun 25 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 mssql 数据库分页SQL语句
2008/12/16 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
PHP If Else(elsefi) 语句
2013/04/07 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
php银联网页支付实现方法
2015/03/04 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
JavaScript实现音乐导航效果
2020/11/19 Javascript
python实现rsa加密实例详解
2017/07/19 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
Python import与from import使用及区别介绍
2018/09/06 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
python多线程并发实例及其优化
2019/06/27 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
python输出带颜色字体实例方法
2019/09/01 Python
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
中秋节超市促销方案
2014/01/30 职场文书
消防安全宣传口号
2014/06/10 职场文书
金融管理专业求职信
2014/07/10 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL