小结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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
浅析python协程相关概念
Jan 20 Python
python 矩阵增加一行或一列的实例
Apr 04 Python
python写入已存在的excel数据实例
May 03 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
kafka-python批量发送数据的实例
Dec 27 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
如何在Python中实现goto语句的方法
May 18 Python
详解基于python-django框架的支付宝支付案例
Sep 23 Python
python3获取文件中url内容并下载代码实例
Dec 27 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
Python urllib.request对象案例解析
May 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
在php中取得image按钮传递的name值
2006/10/09 PHP
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
php中$_POST与php://input的区别实例分析
2015/01/07 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
Python socket 套接字实现通信详解
2019/08/27 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
一年级语文教学反思
2014/02/13 职场文书
家教广告词
2014/03/19 职场文书
高中数学教学反思范文
2016/02/18 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
css3 选择器
2022/05/11 HTML / CSS