简单分析Python中用fork()函数生成的子进程


Posted in Python onMay 04, 2015

python的os module中有fork()函数用于生成子进程,生成的子进程是父进程的镜像,但是它们有各自的地址空间,子进程复制一份父进程内存给自己,两个进程之 间的执行是相互独立的,其执行顺序可以是不确定的、随机的、不可预测的,这点与多线程的执行顺序相似。 

import os
def child():
  print 'A new child:', os.getpid()
  print 'Parent id is:', os.getppid()
  os._exit(0)
def parent():
  while True:
    newpid=os.fork()
    print newpid
    if newpid==0:
      child()
    else:
      pids=(os.getpid(),newpid)
      print "parent:%d,child:%d"%pids
      print "parent parent:",os.getppid()    
    if raw_input()=='q':
      break
parent()

    在我们加载了os模块之后,我们parent函数中fork()函数生成了一个子进程,返回值newpid有两个,一个为0,用以表示子进程,一个是大于 0的整数,用以表示父进程,这个常数正是子进程的pid. 通过print语句我们可以清晰看到两个返回值。如果fork()返回值是一个负值,则表明子进程生成不成功(这个简单程序中没有考虑这种情况)。如果 newpid==0,则表明我们进入到了子进程,也就是child()函数中,在子进程中我们输出了自己的id和父进程的id。如果进入了else语句, 则表明newpid>0,我们进入到父进程中,在父进程中os.getpid()得到自己的id,fork()返回值newpid表示了子进程的id,同时我们输出了父进程的父进程的id. 通过实验我们可以看到if和else语句的执行顺序是不确定的,子、父进程的执行顺序由操作系统的调度算法来决定。

Python 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
使用优化器来提升Python程序的执行效率的教程
Apr 02 Python
python提取页面内url列表的方法
May 25 Python
python实现web方式logview的方法
Aug 10 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
浅析python 字典嵌套
Sep 29 Python
python实现从字典中删除元素的方法
May 04 #Python
Python中利用原始套接字进行网络编程的示例
May 04 #Python
python通过索引遍历列表的方法
May 04 #Python
python实现将元祖转换成数组的方法
May 04 #Python
编写Python脚本来获取mp3文件tag信息的教程
May 04 #Python
python通过定义一个类实例作为ftp回调方法
May 04 #Python
Python中__new__与__init__方法的区别详解
May 04 #Python
You might like
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
PHP基础知识介绍
2013/09/17 PHP
php中cookie的使用方法
2014/03/29 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
php实现cookie加密的方法
2015/03/10 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
2015/04/07 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
关于php开启错误提示的总结
2019/09/24 PHP
突发奇想的一个jquery插件
2010/11/19 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
Python文件操作基本流程代码实例
2017/12/11 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
python实现定时发送邮件
2020/12/23 Python
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
图书室标语
2014/06/21 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL