Python使用multiprocessing创建进程的方法


Posted in Python onJune 04, 2015

本文实例讲述了Python使用multiprocessing创建进程的方法。分享给大家供大家参考。具体分析如下:

进程可以通过调用multiprocessing的Process进行创建,下面代码创建两个进程。

[root@localhost ~]# cat twoproces.py 
#!/usr/bin/env python
from multiprocessing import Process
import os
def output():
 print "My pid is :%d\n" % os.getpid()
 print "My parent is:%d\n" % os.getppid()
def main():
 p=Process(target=output) 
 p.start()
 print "I am parent %d\n" % os.getpid()
if __name__=="__main__":
 main()

运行结果如下:

[root@localhost ~]# ./twoproces.py 
I am parent 7656
My pid is :7660
My parent is:7656

以下程序结果的mypid值将在两个进程中固定不变.

[root@localhost ~]# cat badprocessID.py 
#!/usr/bin/env python
from multiprocessing import Process
import os
def output(mypid):
 print "I am child %d ID :%d\n" % (os.getpid(),mypid)
def main():
 mypid=os.getpid()
 p=Process(target=output,args=(mypid,)) 
 print "I am parent %d\n" % os.getpid()
 p.start()
if __name__=="__main__":
 main()

有与子进程并没有重设mypid,所以运行过程中mypid并没有任何改变。

下面代码将创建一个由子进程创建子进程的进程链。

[root@localhost ~]# cat simplechina.py 
#!/usr/bin/env python
import os
from multiprocessing import Process
def output(howmany,childpid):
 info = (howmany,os.getpid(),os.getppid(),childpid)
 print "i:%d process ID:%d parent ID%d child ID %d\n" % info
def chain(howmany):
 howmany = howmany-1
 if howmany > 0:
 p = Process(target=chain,args=(howmany,)) 
 p.start()
 output(howmany,p.pid)
def main():
 childpid = 0
 howmany=6
 p = Process(target=chain,args=(howmany,))
 p.start()
if __name__=="__main__":
 main()

有与主进程利用Process创建子进程,而子进程又再创建子进程(也就是A->B->C-D),如此类推,知道howmany小于0结束。运行1结果如下:

[root@localhost ~]# ./simplechina.py 
i:5 process ID:13581 parent ID13580 child ID 13582
i:4 process ID:13582 parent ID13581 child ID 13583
i:3 process ID:13583 parent ID13582 child ID 13584
i:2 process ID:13584 parent ID13583 child ID 13585
i:1 process ID:13585 parent ID13584 child ID 13586

接下来如何创建一个进程扇,也就是:
            A
          /   \
         B     C
建立simplefan.py文件,代码如下:

[root@localhost ~]# cat simplefan.py 
#!/usr/bin/env python
import os
from multiprocessing import Process
def output(howmany,childpid):
 info = (howmany,os.getpid(),os.getppid(),childpid)
 print "i:%d process ID:%d parent ID%d child ID %d\n" % info
def fan(i):
 output(i,os.getpid())
def main():
 pList=[]
 for i in range(6):
 p = Process(target=fan,args=(i,))
 pList.append(p)
 for p in pList:
 p.start()
 for p in pList:
 p.join()
if __name__=="__main__":
 main()

运行结果如下:

[root@localhost ~]# ./simplefan.py 
i:0 process ID:13594 parent ID13593 child ID 13594
i:2 process ID:13596 parent ID13593 child ID 13596
i:3 process ID:13597 parent ID13593 child ID 13597
i:1 process ID:13595 parent ID13593 child ID 13595
i:4 process ID:13598 parent ID13593 child ID 13598
i:5 process ID:13599 parent ID13593 child ID 13599

除了进程ID为13593的进程外,其它进程的父进程都是13593
父进程利用join方法等等所有的子进程结束。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python之eval()函数危险性浅析
Jul 03 Python
Python中对列表排序实例
Jan 04 Python
python基础教程项目二之画幅好画
Apr 02 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
Django工程的分层结构详解
Jul 18 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 Python
用Python绘制漫步图实例讲解
Feb 26 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 Python
解决pytorch 模型复制的一些问题
Mar 03 Python
Python中使用subprocess库创建附加进程
May 11 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 #Python
python实现支持目录FTP上传下载文件的方法
Jun 03 #Python
python实现的DES加密算法和3DES加密算法实例
Jun 03 #Python
python获取各操作系统硬件信息的方法
Jun 03 #Python
wxPython定时器wx.Timer简单应用实例
Jun 03 #Python
Python基于DES算法加密解密实例
Jun 03 #Python
Python使用minidom读写xml的方法
Jun 03 #Python
You might like
thinkphp学习笔记之多表查询
2014/07/28 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
浅析php-fpm静态和动态执行方式的比较
2016/11/09 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
使用隐藏的new来创建对象
2011/03/29 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
python 捕获shell脚本的输出结果实例
2017/01/04 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
django中的setting最佳配置小结
2017/11/21 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
python如何实现异步调用函数执行
2019/07/08 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
Python urllib3软件包的使用说明
2020/11/18 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
致跳高运动员加油稿
2014/02/12 职场文书
房产分割协议书范文
2014/11/21 职场文书
骨干教师申报材料
2014/12/17 职场文书
仙境之桥观后感
2015/06/16 职场文书
TV动画《间谍过家家》公开PV
2022/03/20 日漫