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 相关文章推荐
django manage.py扩展自定义命令方法
May 27 Python
目前最全的python的就业方向
Jun 05 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
Sanic框架安装与简单入门示例
Jul 16 Python
pytorch permute维度转换方法
Dec 14 Python
python 批量添加的button 使用同一点击事件的方法
Jul 17 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
python爬虫-模拟微博登录功能
Sep 12 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
Python如何绘制日历图和热力图
Aug 07 Python
如何利用python和DOS获取wifi密码
Mar 31 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 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
mysql5写入和读出乱码解决
2006/11/25 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
Javascript typeof 用法
2008/12/28 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
JS求解三元一次方程组值的方法
2017/01/03 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
微信小程序使用Socket的实例
2017/09/19 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
Python中os和shutil模块实用方法集锦
2014/05/13 Python
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
实例讲解python中的序列化知识点
2018/10/08 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
python中dict使用方法详解
2019/07/17 Python
python实现学生成绩测评系统
2020/06/22 Python
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
肯尼迪就职演说稿
2013/12/31 职场文书
学生会主席事迹材料
2014/01/28 职场文书
小学生演讲稿大全
2014/04/25 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
中秋节晚会开场白
2015/05/29 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
导游词之西安骊山
2019/12/20 职场文书