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自动翻译实现方法
May 28 Python
Python调用C# Com dll组件实战教程
Oct 12 Python
Python实现XML文件解析的示例代码
Feb 05 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 Python
Python列表对象实现原理详解
Jul 01 Python
django数据库自动重连的方法实例
Jul 21 Python
python3实现单目标粒子群算法
Nov 14 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
Apr 03 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
Python 中Operator模块的使用
Jan 30 Python
python实现控制台输出颜色
Mar 02 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
php根据年月获取季度的方法
2014/03/31 PHP
php事务处理实例详解
2014/07/11 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
深入理解Javascript动态方法调用与参数修改的问题
2013/12/10 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
对python 调用类属性的方法详解
2019/07/02 Python
wxPython实现带颜色的进度条
2019/11/19 Python
Python中logger日志模块详解
2020/08/04 Python
10个示例带你掌握python中的元组
2020/11/23 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
实习自我评价怎么写
2013/12/02 职场文书
大学毕业生通用自我评价
2014/01/05 职场文书
初中化学教学反思
2014/01/23 职场文书
工作说明书范文
2014/05/07 职场文书
报效祖国演讲稿
2014/09/15 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS