小结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中os.path用法分析
Jan 15 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
Linux下python制作名片示例
Jul 20 Python
python 实现调用子文件下的模块方法
Dec 07 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
python dlib人脸识别代码实例
Apr 04 Python
在Python中实现函数重载的示例代码
Dec 12 Python
Tensorflow 多线程与多进程数据加载实例
Feb 05 Python
python中sympy库求常微分方程的用法
Apr 28 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
python基础之停用词过滤详解
Apr 21 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
2020最新CPU的性能排名
2020/04/02 数码科技
DOMXML函数笔记
2006/10/09 PHP
PHP XML数据解析代码
2010/05/26 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
老师推荐信
2013/10/28 职场文书
王老吉广告词
2014/03/20 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
运动员加油词
2015/07/18 职场文书
七年级作文之环保作文
2019/10/17 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers