小结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 相关文章推荐
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
python3中str(字符串)的使用教程
Mar 23 Python
Python OpenCV获取视频的方法
Feb 28 Python
django加载本地html的方法
May 27 Python
浅谈django三种缓存模式的使用及注意点
Sep 30 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
python flask搭建web应用教程
Nov 19 Python
python asyncio 协程库的使用
Jan 21 Python
python实现图片九宫格分割的示例
Apr 25 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
PHP.vs.JAVA
2016/04/29 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
python常见数制转换实例分析
2015/05/09 Python
独特的python循环语句
2016/11/20 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
简单了解什么是神经网络
2017/12/23 Python
python编写弹球游戏的实现代码
2018/03/12 Python
python遍历小写英文字母的方法
2019/01/02 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
物业总经理岗位职责
2014/02/28 职场文书
幼儿园运动会口号
2014/06/07 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS