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程序的执行原理
Apr 11 Python
Python正则表达式使用范例分享
Dec 04 Python
详解python中的json的基本使用方法
Dec 21 Python
Sanic框架路由用法实例分析
Jul 16 Python
python编程使用协程并发的优缺点
Sep 20 Python
对python中list的拷贝与numpy的array的拷贝详解
Jan 29 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
python计算二维矩形IOU实例
Jan 18 Python
python中with用法讲解
Feb 07 Python
Python3标准库之dbm UNIX键-值数据库问题
Mar 24 Python
python中字典增加和删除使用方法
Sep 30 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的FTP学习(二)
2006/10/09 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
解析curl提交GET,POST,Cookie的简单方法
2013/06/29 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
用python登录Dr.com思路以及代码分享
2014/06/25 Python
Python 多线程Threading初学教程
2017/08/22 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
Django的CVB实例详解
2020/02/10 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
信息服务专业毕业生求职信
2014/03/02 职场文书
大跃进口号
2014/06/16 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
街道社区活动报告
2015/02/05 职场文书
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python
MySQL Server层四个日志的实现
2022/03/31 MySQL
win10搭建配置ftp服务器的方法
2022/08/05 Servers