小结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 相关文章推荐
压缩包密码破解示例分享(类似典破解)
Jan 17 Python
Python BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
Python序列之list和tuple常用方法以及注意事项
Jan 09 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
Nov 06 Python
Linux 修改Python命令的方法示例
Dec 03 Python
python计算n的阶乘的方法代码
Oct 25 Python
使用python制作一个解压缩软件
Nov 13 Python
Python字符串格式化输出代码实例
Nov 22 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
python实时监控logstash日志代码
Apr 27 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
Pandas数据类型之category的用法
Jun 28 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
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
php基础教程
2015/08/26 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
微信小程序实现留言板(Storage)
2018/11/02 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
微信小程序 image组件遇到的问题
2019/05/28 Javascript
js实现打字小游戏
2019/12/17 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
Python 文件管理实例详解
2015/11/10 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
校园安全演讲稿
2014/05/09 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
2014年林业工作总结
2014/12/05 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS