python3启动子进程之 os.fork()
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()的更多相关文章
- Python 使用 os.fork() 创建子进程
Linux 操作系统提供了一个 fork() 函数用来创建子进程,这个函数很特殊,调用一次,返回两次,因为操作系统是将当前的进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回.子进程永 ...
- python多进程--------linux系统中python的os.fork()方法
linux下python 创建子进程的原理: os.fork()方法 的原理 为了实现并发.多任务,我们可以在主程序种开启一个进程或者线程.在类unix操作系统当中(非windows),可以用pyth ...
- 创建一个新的进程os.fork
import os pid = os.fork()功能:创建新的进程参数:无返回值:失败返回一个负数 成功:在原有进程中返回一个新的进程的PID号 在新的进程中返回0 *子进程会复制父进程全部代码段, ...
- os.fork()
ret = os.fork() if ret == 0: child_suite # 子进程代码 else: parent_suite # 父进程代码 Python中的fork() 函数可以获得系统中 ...
- OS之os.fork()
有两种方式来实现并发性, 一种方式是让每个“任务"或“进程”在单独的内在空间中工作,每个都有自已的工作内存区域.不过,虽然进程可在单独的内存空间中执行,但除非这些进程在单独的处理器上执行,否 ...
- os.fork()----linux
fork() 函数,它也属于一个内建并 且只在 Linux 系统下存在. 它非常特殊普通的函数调用,一次返 回但是 fork() 调用一次,返回两次.因为操作系统自动把当前进程(称为父)复制了一份(称 ...
- java启动子进程以及进程通信
1.利用进程的管道通信传输流 2.子进程没有控制台,正常测试的时候也是没办法看到子进程的输出的,需要传到主线程 3.测试主进程传参给子进程再传回来 4.父进程启动子进程只要执行runtime.exec ...
- 运行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 ...
- Python3 join函数和os.path.join用法
Python3 join函数和os.path.join用法 os.path.join()连接两个文件名地址的时候,就比os.path.join("D:\","test. ...
随机推荐
- Linux中MySQL二进制安装步骤
MySQL二进制安装步骤 安装依赖环境 [root@node3 ~]# yum -y install libaio 将mysql-5.7.26-linux-glibc2.12-x86_64.tar.g ...
- 【springboot spring mybatis】看我怎么将springboot与spring整合mybatis与druid数据源
目录 概述 1.mybatis 2.druid 壹:spring整合 2.jdbc.properties 3.mybatis-config.xml 二:java代码 1.mapper 2.servic ...
- c# 使用Newtonsoft.Json解析JSON数组
一.获取JSon中某个项的值 要解析格式: [{"VBELN":"10","POSNR":"10","RET_ ...
- Python之open()函数
Python内置了读写文件的函数open(). # 方法一 # 使用Python内置的open()函数,传入文件名和标示符 f = open('E:/test/driver.py', 'r', enc ...
- python的进制转换
转载于:https://www.cnblogs.com/FWF1944/p/11132409.html(方法论190404) Python整数能够以十六进制,八进制和二进制来编写,作为一般以10位基数 ...
- u库前戏
u库 ORM:对象关系映射 类 >>> 数据库的一张表 对象 >>> 表的一条记录 对象点属性 >>> 记录某一个字段对应的值 ''' 对象就是一 ...
- webpack打包es6代码
1.简单描述一下es6的模块导入和导出的语法: //导出:export var aa = 10;export function demo(){} //不能写成:var aa = 10;export a ...
- java-TreeMap
2019-12-17 10:34:55 //返回小于key的第一个键: K lowerKey(K key); //返回大于key的第一个键: K higherKey(K key); //返回小于等于k ...
- [模拟,英语阅读] Codeforces 549D Haar Features
题目:https://codeforces.com/contest/549/problem/D D. Haar Features time limit per test 1 second memory ...
- Python批量修改Excel中的文件内容
import osimport xlrdfrom xlutils.copy import copydef base_dir(filename=None): return os.path.join ...