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 相关文章推荐
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
利用Python暴力破解zip文件口令的方法详解
Dec 21 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
PyCharm配置mongo插件的方法
Nov 30 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
使用浏览器访问python写的服务器程序
Oct 10 Python
jupyter notebook实现显示行号
Apr 13 Python
用python实现名片管理系统
Jun 18 Python
Pytho爬虫中Requests设置请求头Headers的方法
Sep 22 Python
关于Python中*args和**kwargs的深入理解
Aug 07 Python
Python 的 sum() Pythonic 的求和方法详细
Oct 16 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
php模拟post提交数据的方法
2015/02/12 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
中止javascript执行的方法
2014/02/14 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
python 有效的括号的实现代码示例
2019/11/11 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
什么是servlet链?
2014/07/13 面试题
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
班级旅游计划书
2014/05/03 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
话题作文之诚信
2019/11/28 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
PyTorch中permute的使用方法
2022/04/26 Python