小结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 BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
讲解Python中的递归函数
Apr 27 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
Jun 02 Python
python内置函数:lambda、map、filter简单介绍
Nov 16 Python
python基础教程项目四之新闻聚合
Apr 02 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
详解python3 + Scrapy爬虫学习之创建项目
Apr 12 Python
用Python写一个自动木马程序
Sep 17 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
Python 实现Mac 屏幕截图详解
Oct 05 Python
Python 的 sum() Pythonic 的求和方法详细
Oct 16 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教程 插件机制在PHP中实现方案
2012/11/02 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
如何查看python关键字
2021/01/17 Python
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
类的返射机制中的包及核心类
2016/09/12 面试题
Ruby如何创建一个线程
2013/03/10 面试题
农田水利实习自我鉴定
2013/09/19 职场文书
女大学生自我鉴定
2013/12/09 职场文书
校长四风对照检查材料
2014/09/27 职场文书