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对指定目录下文件进行批量重命名的方法
Apr 18 Python
python实现合并两个数组的方法
May 16 Python
Python实现堆排序的方法详解
May 03 Python
Python中断言Assertion的一些改进方案
Oct 27 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
python pycharm的安装及其使用
Oct 11 Python
python3.x 生成3维随机数组实例
Nov 28 Python
Python-openCV读RGB通道图实例
Jan 17 Python
IDLE下Python文件编辑和运行操作
Apr 25 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
matplotlib对象拾取事件处理的实现
Jan 14 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的简单的dao类实现crud操作功能
2014/01/27 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
PHP开发注意事项总结
2015/02/04 PHP
php实现搜索类封装示例
2016/03/31 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
javascript的事件描述
2006/09/08 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
jquery实现图片轮播器
2017/05/23 jQuery
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
Python实现股市信息下载的方法
2015/06/15 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
Python表达式的优先级详解
2020/02/18 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
经贸专业毕业生求职信
2014/03/23 职场文书
会计系毕业生求职信
2014/05/28 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
2014年保洁工作总结
2014/11/24 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android