python3启动子进程之 os.fork()

先了解python3 os.fork()  使用说明

在生物学家开始克隆研究之前,计算机科学家就拥有成功的克隆历史。他们克隆了进程,尽管他们没有将其称为克隆而是fork,fork是Unix和Linux最重要的方面之一。当进程要fork(克隆)时,它会创建自己的副本,更一般而言,在多线程(进程)环境中的fock意味着执行的线程(进程)被复制,从而从父线程(进程)创建子线程。它们是相同的,但可以区分开。fork操作为子线程(进程)创建一个单独的地址空间。子进程具有父进程所有内存的精确副本。父子进程的执行彼此独立。

这个函数很特殊,调用一次,返回两次,因为操作系统是将当前的进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回。子进程永远返回0,而父进程返回子进程的 PID。我们可以通过判断返回值是不是 0 来判断当前是在父进程还是子进程中执行

  • os.fork() 用于在程序中创建子进程,这个方法在子进程中返回0,在父进程中返回子进程的pid。
  • os.fork()  子进程只执行os.fork() 之后的代码块
import os
print('before')
pid=os.fork()
print('after')
print('我的pid',pid)
print('bbb')
before
after
我的pid 58000
bbb
after
我的pid 0
bbb

 说明:程序执行到fork的时候 操作系统对当前的进程(父进程)复制了一份(子进程)地址空间,然后两个同时执行fork()以后的代码 ,同时将的fork()不同值返回给父子进程各自pid变量,然后在执行之后的代码

也就是同时执行

pid=
print('after')
print('我的pid',pid)
print('bbb')

 所以会打印各自的pid 和 两个 after,bbb

import os
import time
print('before')
os.fork()
print('pid',os.getpid())
os.fork()
print('ppid',os.getppid())

上面会            主进程---fork--->子进程(独立)

|                           |

fork                      fork

\|/                        \|/

子进程                  子进程

通过pid  判断 子进程和父进程 并执行行相应代码

依据: os.fork() 用于在程序中创建子进程,这个方法在子进程中返回0,在父进程中返回子进程的pid

import os

def  son():
print('son')
print(max(2,3)) def father():
print('father')
print(min(2, 3)) pid=os.fork() if pid==0:
son()
else:
father()
father
2
son
3

  

到目前为止,我们已经在示例中调用了在同一脚本文件中定义的函数。

fork通常用于启动独立程序。为此,我们需要exec *()函数。

他们通过用该程序替换当前进程来执行新程序。他们不会返回调用它们的程序。他们甚至收到与调用程序相同的进程ID。

exec函数 参考https://www.python-course.eu/forking.php

python3启动子进程之 os.fork()的更多相关文章

  1. Python 使用 os.fork() 创建子进程

    Linux 操作系统提供了一个 fork() 函数用来创建子进程,这个函数很特殊,调用一次,返回两次,因为操作系统是将当前的进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回.子进程永 ...

  2. python多进程--------linux系统中python的os.fork()方法

    linux下python 创建子进程的原理: os.fork()方法 的原理 为了实现并发.多任务,我们可以在主程序种开启一个进程或者线程.在类unix操作系统当中(非windows),可以用pyth ...

  3. 创建一个新的进程os.fork

    import os pid = os.fork()功能:创建新的进程参数:无返回值:失败返回一个负数 成功:在原有进程中返回一个新的进程的PID号 在新的进程中返回0 *子进程会复制父进程全部代码段, ...

  4. os.fork()

    ret = os.fork() if ret == 0: child_suite # 子进程代码 else: parent_suite # 父进程代码 Python中的fork() 函数可以获得系统中 ...

  5. OS之os.fork()

    有两种方式来实现并发性, 一种方式是让每个“任务"或“进程”在单独的内在空间中工作,每个都有自已的工作内存区域.不过,虽然进程可在单独的内存空间中执行,但除非这些进程在单独的处理器上执行,否 ...

  6. os.fork()----linux

    fork() 函数,它也属于一个内建并 且只在 Linux 系统下存在. 它非常特殊普通的函数调用,一次返 回但是 fork() 调用一次,返回两次.因为操作系统自动把当前进程(称为父)复制了一份(称 ...

  7. java启动子进程以及进程通信

    1.利用进程的管道通信传输流 2.子进程没有控制台,正常测试的时候也是没办法看到子进程的输出的,需要传到主线程 3.测试主进程传参给子进程再传回来 4.父进程启动子进程只要执行runtime.exec ...

  8. 运行os.fork()报AttributeError: module 'os' has no attribute 'fork'

    现象 报错代码 def handle(s, c, db): pid = os.fork() if pid == 0: s.close() do_child(c, db) sys.exit() else ...

  9. Python3 join函数和os.path.join用法

    Python3  join函数和os.path.join用法 os.path.join()连接两个文件名地址的时候,就比os.path.join("D:\","test. ...

随机推荐

  1. Gorm 预加载及输出处理(二)- 查询输出处理

    上一篇<Gorm 预加载及输出处理(一)- 预加载应用>中留下的三个问题: 如何自定义输出结构,只输出指定字段? 如何自定义字段名,并去掉空值字段? 如何自定义时间格式? 这一篇先解决前两 ...

  2. 《JavaScript 模式》读书笔记(2)— 基本技巧3

    这是基本技巧的最后一篇内容,这篇内容示例代码并不多.主要是概念比较多一点. 编码约定 确定并一致遵循约定比这个具体约定是什么更为重要. 一.缩进 无论是使用tab还是空格,只要是一致遵循的,是什么并不 ...

  3. GO语言web框架Gin之完全指南(一)

    作为一款企业级生产力的web框架,gin的优势是显而易见的,高性能,轻量级,易用的api,以及众多的使用者,都为这个框架注入了可靠的因素.截止目前为止,github上面已经有了 35,994 star ...

  4. 从零开始学习R语言(八)——R语言绘图

    本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/74051739 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125683 ...

  5. (2)Windows PowerShell使用

    什么是PowerShell: Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能.PowerShell是命 ...

  6. Mac下 eclipse target runtime com.genuitec.runtime 解决方法

    Mac下 eclipse target runtime com.genuitec.runtime 解决方法 解决步骤如下: 首先是找到工程项目一个名叫.settings的文件夹,里面有个叫 org.e ...

  7. MATLAB 颜色图函数(imagesc/scatter/polarPcolor/pcolor)

    2维的热度图 imagesc imagesc(x, y, z),x和y分别是横纵坐标,z为值,表示颜色 imagesc(theta,phi,slc); colorbar xlabel(); ylabe ...

  8. 倒影box-reflect(可图片可文字)

    需要写兼容写法: -webkit-box-reflect:below 3px -webkit-(repeating)linear/redial-gradient(...): 1.先写direction ...

  9. 开发一个健壮的npm包

    项目地址:loan-calculate-utils npm包的发布.更新查看上一篇文章 开发一个基础的npm包 目前我们的目录是这个样子: . ├── source 源代码目录 │   └── ind ...

  10. ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径

    IViewLocationExpander API ExpandViewLocations Razor视图路径,视图引擎会搜索该路径. PopulateValues 每次调用都会填充路由 项目目录如下 ...