小结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 面向对象 成员的访问约束
Dec 23 Python
从零学python系列之教你如何根据图片生成字符画
May 23 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
May 03 Python
利用Python中的pandas库对cdn日志进行分析详解
Mar 07 Python
Python爬虫框架Scrapy实例代码
Mar 04 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
python中@property和property函数常见使用方法示例
Oct 21 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
Python自动化测试PO模型封装过程详解
Jun 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
C#静态方法与非静态方法实例分析
2014/09/22 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
Python字符串替换实例分析
2015/05/11 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
windows支持哪个版本的python
2020/07/03 Python
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
金融专业个人求职信
2013/09/22 职场文书
简历自荐信
2013/12/02 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
商铺消防安全责任书
2014/07/29 职场文书
党员剖析材料范文
2014/12/18 职场文书
爱晚亭导游词
2015/02/09 职场文书
创业计划书之面包店
2019/09/17 职场文书
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis