小结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 相关文章推荐
linux环境下安装pyramid和新建项目的步骤
Nov 27 Python
Python存取XML的常见方法实例分析
Mar 21 Python
利用Python如何生成hash值示例详解
Dec 20 Python
python字典快速保存于读取的方法
Mar 23 Python
python 实现将字典dict、列表list中的中文正常显示方法
Jul 06 Python
python 内置模块详解
Jan 01 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
Jul 04 Python
Anaconda+Pycharm环境下的PyTorch配置方法
Mar 13 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 Python
python绘制雷达图实例讲解
Jan 03 Python
python 实现Requests发送带cookies的请求
Feb 08 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文件的实现方法
2007/03/19 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
js loading加载效果实现代码
2009/11/24 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
2012/05/23 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
Python当中的array数组对象实例详解
2019/06/12 Python
python虚拟环境完美部署教程
2019/08/06 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
销售人员求职信
2014/07/22 职场文书
元旦趣味活动方案
2014/08/22 职场文书
员工辞职信怎么写
2015/02/27 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
医生行业员工的辞职信
2019/06/24 职场文书