小结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生成器generator用法实例分析
Jun 04 Python
Python信息抽取之乱码解决办法
Jun 29 Python
详解python基础之while循环及if判断
Aug 24 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
Python中多个数组行合并及列合并的方法总结
Apr 12 Python
Python实现中一次读取多个值的方法
Apr 22 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
详解scrapy内置中间件的顺序
Sep 28 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 Python
python读取图片颜色值并生成excel像素画的方法实例
Feb 19 Python
Django基础CBV装饰器和中间件
Mar 22 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使之能同时支持GIF和JPEG
2006/10/09 PHP
常用的php对象类型判断
2008/08/27 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
Vue实现简易计算器
2020/02/25 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
React实现todolist功能
2020/12/28 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
python中使用序列的方法
2015/08/03 Python
Python实现简单登录验证
2016/04/13 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
Python解析多帧dicom数据详解
2020/01/13 Python
python 生成器需注意的小问题
2020/09/29 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
函授本科个人自我鉴定
2014/03/25 职场文书
买房协议书范本
2014/10/23 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫