小结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基础教程之循环介绍
Aug 29 Python
python optparse模块使用实例
Apr 09 Python
Python批量重命名同一文件夹下文件的方法
May 25 Python
分享python数据统计的一些小技巧
Jul 21 Python
读写json中文ASCII乱码问题的解决方法
Nov 05 Python
Python实现矩阵转置的方法分析
Nov 24 Python
详解Python之unittest单元测试代码
Jan 24 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
python异常处理之try finally不报错的原因
May 18 Python
如何用python实现一个HTTP连接池
Jan 14 Python
Python爬取酷狗MP3音频的步骤
Feb 26 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
一个ftp类(ini.php)
2006/10/09 PHP
PHP新手上路(五)
2006/10/09 PHP
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
JQuery中serialize()用法实例分析
2015/02/06 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
Python异常处理总结
2014/08/15 Python
python 异常处理总结
2016/10/18 Python
详解python之简单主机批量管理工具
2017/01/27 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
Python检测网络延迟的代码
2018/05/15 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
中专毕业生的自我鉴定
2013/12/01 职场文书
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
Python创建SQL数据库流程逐步讲解
2022/09/23 Python