小结Python用fork来创建子进程注意事项


Posted in Python onJuly 03, 2014

自己随手写了Python下 fork 进程的测试代码(来说明这个问题不一定完全合适):

def fork(a):
 def now():
  import datetime
  return datetime.datetime.now().strftime("%S.%f")
 import os
 import time
 print now(), a
 if os.fork() == 0:
  print '子进程[%s]:%s' % (now(), os.getpid())
  while 1:
   a-=10
   print '子进程的a值[%s]:%s' % (now(), a)
   if a < 1:
    break
  print '准备退出子进程'
  #os._exit(0) ## 你可以在这里退出子进程
 else:
  print '父进程[%s]:%s' % (now(), os.getpid())
  while 1:
   a-=1
   print '父进程的a值[%s]:%s' % (now(), a)
   if a < 0:
    break
  time.sleep(1)
  print '等待子进程结束...'
  try:
   result = os.wait()
   if result:
    print '子进程:', result[0], result[1]
   else:
    print '没有数据!'
  except:
   print '异常哦...'
  print '父进程...'
 print '最后的值:',a
 #exit(0) ## 你也可以在这里退出,注意,这里是父进程和子进程都共用的地方,在这里退出会导致父进程也一并退出

TIPS:

os.fork() 会有两次返回值,分别是父进程和子进程的返回值
在父进程中,fork返回的值是子进程的PID;
子进程中,这个返回值为0
子进程会复制父进程的上下文
父子进程并不能确定执行顺序
os.fork() 之后,子进程一定要使用 exit() 或者 os._exit() 来退出子进程环境,建议使用 os._exit()
os.fork() 来创建子进程的这个代码并不是很通适,Linux是没问题的,在Windows下就是不能用的,而官方文档也有类似表述:

Note that some platforms including FreeBSD <= 6.3, Cygwin and OS/2 EMX have known issues when using fork() from a thread
Availability: Unix.
Python 相关文章推荐
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
python 实现对文件夹内的文件排序编号
Apr 12 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
TensorFlow实现模型评估
Sep 07 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
python读写csv文件方法详细总结
Jul 05 Python
django最快程序开发流程详解
Jul 19 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
python pandas移动窗口函数rolling的用法
Feb 29 Python
python 常见的排序算法实现汇总
Aug 21 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 Python
在Windows8上的搭建Python和Django环境
Jul 03 #Python
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 #Python
盘点提高 Python 代码效率的方法
Jul 03 #Python
python实现html转ubb代码(html2ubb)
Jul 03 #Python
Python 获取新浪微博的最新公共微博实例分享
Jul 03 #Python
python socket 超时设置 errno 10054
Jul 01 #Python
python设置检查点简单实现代码
Jul 01 #Python
You might like
php面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
Add a Table to a Word Document
2007/06/15 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
jquery ztree实现右键收藏功能
2017/11/20 jQuery
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
python 写的一个爬虫程序源码
2016/02/28 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
项目专员岗位职责
2013/12/04 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
鲁迅故居导游词
2015/02/05 职场文书
妈妈别哭观后感
2015/06/08 职场文书
党员反邪教心得体会
2016/01/15 职场文书
公司周年庆寄语
2019/06/21 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
分析Java中Map的遍历性能问题
2021/06/26 Java/Android