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获取文件后缀名及批量更新目录下文件后缀名的方法
Nov 11 Python
Python转换HTML到Text纯文本的方法
Jan 15 Python
python 获取网页编码方式实现代码
Mar 11 Python
Python3中类、模块、错误与异常、文件的简易教程
Nov 20 Python
Python实现翻转数组功能示例
Jan 12 Python
Python使用numpy模块创建数组操作示例
Jun 20 Python
Python 确定多项式拟合/回归的阶数实例
Dec 29 Python
Python mutiprocessing多线程池pool操作示例
Jan 30 Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 Python
python中opencv实现图片文本倾斜校正
Jun 11 Python
Python实现老照片修复之上色小技巧
Oct 16 Python
Python中time标准库的使用教程
Apr 13 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
php实现mysql数据库备份类
2008/03/20 PHP
简单的php 验证图片生成函数
2009/05/21 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
js 弹出菜单/窗口效果
2011/10/30 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
Python学生信息管理系统修改版
2018/03/13 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
Python读取stdin方法实例
2019/05/24 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
应用化学专业职业生涯规划书
2014/01/22 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
关于召开会议的通知
2015/04/15 职场文书
2016年元旦致辞
2015/08/01 职场文书
《开国大典》教学反思
2016/02/16 职场文书
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js
「月刊Action」2022年5月号封面公开
2022/03/21 日漫