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模块学习 datetime介绍
Aug 27 Python
python实现倒计时的示例
Feb 14 Python
Python学习小技巧之列表项的拼接
May 20 Python
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
单利模式及python实现方式详解
Mar 20 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
Python基于class()实现面向对象原理详解
Mar 26 Python
django为Form生成的label标签添加class方式
May 20 Python
Python实现删除某列中含有空值的行的示例代码
Jul 20 Python
python 通过exifread读取照片信息
Dec 24 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 Python
Python requests用法和django后台处理详解
Mar 19 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与mysqli对比分析
2016/01/04 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
关于js数组去重的问题小结
2014/01/24 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
深入理解python中的atexit模块
2017/03/07 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
英智兴达软件测试笔试题
2016/10/12 面试题
三年级小学生评语
2014/04/22 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
酒店员工培训方案
2014/06/02 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
七年级作文之秋游
2019/10/21 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle