小结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 相关文章推荐
Django中实现一个高性能计数器(Counter)实例
Jul 09 Python
python简单程序读取串口信息的方法
Mar 13 Python
python通过邮件服务器端口发送邮件的方法
Apr 30 Python
Python3 socket同步通信简单示例
Jun 07 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
Apr 20 Python
Python反爬虫技术之防止IP地址被封杀的讲解
Jan 09 Python
python多线程并发实例及其优化
Jun 27 Python
关于阿里云oss获取sts凭证 app直传 python的实例
Aug 20 Python
python 读取数据库并绘图的实例
Dec 03 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 06 Python
python统计字符的个数代码实例
Feb 07 Python
python实现马丁策略的实例详解
Jan 15 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 字符串 小常识
2009/06/05 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
apache+php+mysql安装配置方法小结
2010/08/01 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
小学生学习感言
2014/03/10 职场文书
大学生简历求职信
2014/06/24 职场文书
企业领导对照检查材料
2014/08/20 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
广播体操比赛主持词
2015/06/29 职场文书
领导离职感言
2015/08/03 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python
js前端设计模式优化50%表单校验代码示例
2022/06/21 Javascript
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL