python os.fork() 循环输出方法


Posted in Python onAugust 08, 2019

先看下面这段代码:

import os
 
 
def main():
  for i in range(0, 2):
    os.fork()
    print 'Hello'
 
 
if __name__ == '__main__':
  main()

猜测一下,会输出几行Hello。

答案是:

Hello
Hello
Hello
Hello
Hello
Hello

6行!为什么呢?

首先,你要明白os.fork()创建的子进程会接着下一行代码继续执行,它有返回值,返回值可以为0表示子进程或者大于0表示父进程pid,os.getpid()返回的是当前进程的pid,那么我们再改改输出来看得更直观一些吧:

import os
 
 
def main():
  for i in range(0, 2):
    pid = os.fork()
    print "Hello", i, os.getpid(), pid
 
 
if __name__ == '__main__':
  main()

输出是这样的:

Hello 0 9760 9761
Hello 0 9761 0
Hello 1 9760 9762
Hello 1 9762 0
Hello 1 9761 9763
Hello 1 9763 0

这就很容易解释了:

第一轮循环,父进程创建了一个子进程P1然后打印,子进程P1接着下面的代码运行,打印。之后进入第二轮循环;

第二轮循环,父进程创建了一个子进程P2然后打印,子进程P2接着下面的代码运行,打印。子进程P1再创建了一个子进程P12然后打印,子进程P12接着下面的代码运行,打印。之后循环结束,共打印六次。

如果进行3轮循环打印多少次呢,答案是14次,读者可以自行验证一下。

水平有限,如有错误欢迎指正!

以上这篇python os.fork() 循环输出方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python常用内置函数总结
Feb 08 Python
Python常用的爬虫技巧总结
Mar 28 Python
Python 高级专用类方法的实例详解
Sep 11 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
Python算法之图的遍历
Nov 16 Python
Python工程师面试必备25条知识点
Jan 17 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
Django开发中的日志输出的方法
Jul 02 Python
用python实现k近邻算法的示例代码
Sep 06 Python
openCV提取图像中的矩形区域
Jul 21 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 Python
对python中的os.getpid()和os.fork()函数详解
Aug 08 #Python
在Python中os.fork()产生子进程的例子
Aug 08 #Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 #Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 #Python
python批量修改ssh密码的实现
Aug 08 #Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 #Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 #Python
You might like
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
php面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
php UBB 解析实现代码
2011/11/27 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
php实现删除空目录的方法
2015/03/16 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
一个tab标签切换效果代码
2009/03/27 Javascript
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
js数组操作学习总结
2013/11/04 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
微信开发 微信授权详解
2016/10/21 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
python实现class对象转换成json/字典的方法
2016/03/11 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
党员违纪检讨书
2014/02/18 职场文书
环保宣传标语
2014/06/12 职场文书
经营目标管理责任书
2014/07/25 职场文书
redis限流的实际应用
2021/04/24 Redis