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基础教程之类class定义使用方法
Feb 20 Python
python线程、进程和协程详解
Jul 19 Python
Python实现选择排序
Jun 04 Python
Flask数据库迁移简单介绍
Oct 24 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
python爬虫自动创建文件夹的功能
Aug 01 Python
浅谈python常用程序算法
Mar 22 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
如何利用Python识别图片中的文字
May 31 Python
Python分类测试代码实例汇总
Jul 23 Python
解决numpy数组互换两行及赋值的问题
Apr 17 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
Zerg基本策略
2020/03/14 星际争霸
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
PHP内核探索之变量
2015/12/22 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
JavaScript模拟push
2016/03/06 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
python机器学习实战之K均值聚类
2017/12/20 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
python3.x上post发送json数据
2018/03/04 Python
python实现大文件分割与合并
2019/07/22 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
2017/08/18 HTML / CSS
Unix里面如何在后台运行程序
2016/10/14 面试题
九一八事变纪念日演讲稿
2014/09/14 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android