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下进行UDP网络编程的教程
Apr 29 Python
Python中的深拷贝和浅拷贝详解
Jun 03 Python
python从入门到精通(DAY 2)
Dec 20 Python
解决PyCharm中光标变粗的问题
Aug 05 Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 Python
使用Python爬取最好大学网大学排名
Feb 24 Python
Python可变参数*args和**kwargs用法实例小结
Apr 27 Python
使用python 3实现发送邮件功能
Jun 15 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
pycharm new project变成灰色的解决方法
Jun 27 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
django 模型中的计算字段实例
May 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获得文件扩展名三法
2006/11/25 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
php轻松实现文件上传功能
2016/03/03 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
javaScript实现滚动条事件详解
2020/03/24 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中fnmatch模块的使用详情
2018/11/30 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
下载官网python并安装的步骤详解
2019/10/12 Python
详解Django配置优化方法
2019/11/18 Python
parser.add_argument中的action使用
2020/04/20 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
python 操作excel表格的方法
2020/12/05 Python
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
授权委托书怎么写
2014/04/03 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript
MySQL导致索引失效的几种情况
2022/06/25 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL