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交互式图形编程实例(一)
Nov 17 Python
python实时获取外部程序输出结果的方法
Jan 12 Python
Python求一批字符串的最长公共前缀算法示例
Mar 02 Python
Python中的 sort 和 sorted的用法与区别
Aug 10 Python
Python实现多线程/多进程的TCP服务器
Sep 03 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
python剪切视频与合并视频的实现
Mar 03 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
Apr 01 Python
python将音频进行变速的操作方法
Apr 08 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 Python
Python更改pip镜像源的方法示例
Dec 01 Python
Python的scikit-image模块实例讲解
Dec 30 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
对Session和Cookie的区分与解释
2007/03/16 PHP
PHP的加密方式及原理
2012/06/14 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
javawscript 三级菜单的实现原理
2009/07/01 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
jquery.validate使用详解
2016/06/02 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
2018/12/29 jQuery
layui table单元格事件修改值的方法
2019/09/24 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
python模拟鼠标拖动操作的方法
2015/03/11 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
python实现简易数码时钟
2021/02/19 Python
python实现小球弹跳效果
2019/05/10 Python
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
小学运动会加油词
2015/07/18 职场文书
会议室管理制度范本
2015/08/06 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
详解nodejs内置模块
2021/05/06 NodeJs
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
python开发的自动化运维工具ansible详解
2021/08/07 Python