小结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之编写类之四再论继承
Oct 11 Python
python中lambda与def用法对比实例分析
Apr 30 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
用Eclipse写python程序
Feb 10 Python
Linux下多个Python版本安装教程
Aug 15 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
python的几种矩阵相乘的公式详解
Jul 10 Python
pytorch 实现打印模型的参数值
Dec 30 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
Python数组拼接np.concatenate实现过程
Apr 18 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
Nov 11 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
使用 MySQL Date/Time 类型
2008/03/26 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
smarty中js的调用方法示例
2014/10/27 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
python ddt实现数据驱动
2018/03/14 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
Python I/O与进程的详细讲解
2019/03/08 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
python中Mako库实例用法
2020/12/31 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
灵泰克Java笔试题
2016/01/09 面试题
生物科学专业个人求职信范文
2013/12/05 职场文书
护理职业生涯规划书
2014/01/24 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
技术入股合作协议书
2014/10/07 职场文书
检讨书1000字
2014/10/11 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
Python中for后接else的语法使用
2021/05/18 Python
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记