小结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用UUID库生成唯一ID的方法示例
Dec 15 Python
Python脚本实现自动将数据库备份到 Dropbox
Feb 06 Python
python获取代理IP的实例分享
May 07 Python
Python 字符串与二进制串的相互转换示例
Jul 23 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
python给list排序的简单方法
Dec 10 Python
Django2.1.7 查询数据返回json格式的实现
Dec 29 Python
python3实现常见的排序算法(示例代码)
Jul 04 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
PHP4之真OO
2006/10/09 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
php实现的SESSION类
2014/12/02 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
Python实现的科学计算器功能示例
2017/08/04 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
单位人事专员介绍信
2014/01/11 职场文书
《小池塘》教学反思
2014/02/28 职场文书
公司周年庆典策划方案
2014/05/17 职场文书
节约用水的口号
2014/06/20 职场文书
学校党员干部承诺书
2015/05/04 职场文书
工商局调档介绍信
2015/10/22 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书