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实现2048小游戏
Jan 19 Python
python机器学习之神经网络(二)
Dec 20 Python
使用python3构建文件传输的方法
Feb 13 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
Nov 19 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
Python xlrd/xlwt 创建excel文件及常用操作
Sep 24 Python
如何一键升级Python所有包
Nov 05 Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 Python
Python修改DBF文件指定列
Dec 19 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使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
新闻内页-JS分页
2006/06/07 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
如何用JavaScript定义一个类
2014/09/12 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
清除输入框内的空格
2016/12/21 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
vue.js实现双击放大预览功能
2020/06/23 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
2019/12/25 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
解决python对齐错误的方法
2020/07/16 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
八年级数学教学反思
2014/01/31 职场文书
群众路线表态发言材料
2014/10/17 职场文书
党支部四风整改方案
2014/10/25 职场文书
努力工作保证书
2015/02/28 职场文书
求职自我推荐信
2015/03/24 职场文书
信息技术远程培训心得体会
2016/01/09 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
MySQL视图概念以及相关应用
2022/04/19 MySQL
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript