小结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 Tkinter GUI编程入门介绍
Mar 10 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
Python作用域用法实例详解
Mar 15 Python
Python处理XML格式数据的方法详解
Mar 21 Python
win10下python3.5.2和tensorflow安装环境搭建教程
Sep 19 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
Django获取应用下的所有models的例子
Aug 30 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 Python
Python基础之元编程知识总结
May 23 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 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 类商品秒杀计时实现代码
2010/05/05 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
副科竞争上岗演讲稿
2014/05/12 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
教师年度个人总结
2015/02/11 职场文书
实习证明格式范文
2015/06/16 职场文书
少先队中队工作总结
2015/08/14 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL