python多进程--------linux系统中python的os.fork()方法
linux下python 创建子进程的原理: os.fork()方法 的原理 为了实现并发、多任务,我们可以在主程序种开启一个进程或者线程。
在类unix操作系统当中(非windows),可以用python的os.fork() 方法 在主进程上创建一个子进程 os.fork():
这句话执行过后,就会创建出一个新的进程来,被我们创建出来的进程我们叫她子进程,当前进程我们叫它主进程
子进程会复制主进程所有内容,包括代码、变量、各种资源。他们两个一摸一样,
两个进程此时同时从os.fork()结束的那个时间点向下执行相同的代码。
这个方法有一个返回值,在主进程中接收到的返回值是子进程的pid、子进程中接收到的是0
获得当前进程的pid: os.getpid()
获得当前进程父进程的pid: os.getppid() 执行下面代码,如果在ide中,发现子进程不一定会不会输出信息。如果在终端中,发现子进程信息和主进程信息都会输出。
因为两个进程之间相互独立,我们能控制的只是当前主进程,如果主进程子进程先结束了,就不等子进程的输出消息了。
import os
pid = os.fork()
if pid == 0:
print("我是子进程%s,我的父进程是%s"%(os.getpid,os.getppid ) )
else:
print("我是父进程%s,我创建了子进程%s"%( os.getpid,pid ))
进程产生垃圾:
僵尸进程: 子进程先死掉,父进程还没死掉的父进程
孤儿进程:父进程死了,子进程还没死掉的子进程 在操作系统中,子进程死掉后,内存等资源都由父进程进行管理回收和释放
如果子进程还没结束,父进程就运行结束了,那么创建出来的子进程就会产生系统垃圾没有其它进程负责释放
所以 主进程创建出来的子进程要主进程自己进行管理,把他们收集回收资源
父进程用os.wait() 可以进行资源回收,会返回两个值 进程的pid 和 一个整数:0代表成功 负数代表失败
import os pid = os.fork()
#子进程会进入这个分支
if pid == 0 :
print("我是子进程%s,我的父进程是%s"%( os.getpid(),os.getppid() ))
#父进程会进入这个分支
else :
print("我是父进程%s,我创建了子进程%s"%( os.getpid(),pid ))
print("我要收集子进程资源:")
son_pid , result = os.wait()
print(son_pid , result )
进程之间不共享变量:
进程是独立占一部分内存空间的
如果我们在主进程中创建一个子进程,子进程是在当前主进程之外申请了一块额外内存,把主进程所有代码和资源复制一份自己来运行。
所以,主进程和子进程是不共享全局变量的。他们分别在自己的内存空间当中维护自己的变量空间
import os
import time
num = 100
pid = os.fork()
#子进程当中
if pid == 0 :
print("这里是子进程:")
print(num)
num = 10
print( num )
#主进程中
else:
time.sleep(3)
print("这里是主进程:")
print( num )
在程序中多次调用fork()
一共会产生多少进程??? 当一个进程调用了fork() 都会生成另一个子进程
然后当前进程和子进程同时fork()语句继续向下执行
import os
os.fork() #主进程会产生一个子进程,两个进程从这里开始继续向下进行
os.fork() #两个进程到这里,分别会给自己创建一个子进程,结果 会有四个进程从这里继续向下
os.fork() # 四个进程到这里,每个进程都会给自己再创建一个子进程。结果会形成八个进程
print("哈哈哈") #会打印出八条哈哈哈
python多进程--------linux系统中python的os.fork()方法的更多相关文章
- Linux系统中python默认版本为python2.7,修改为python3 项目上传码云
# 查询系统本系统中安装的python版本 ls -l /usr/bin/python* 1.在虚拟机上新建虚拟环境 # 系统中python默认版本为python2.,可以将其修改为python3 # ...
- linux系统中python版本升级
一,查看python版本号 python -V 二,下载需要升级到python版本包下载地址https://www.python.org/ftp/python/ 根据需要选择需要的python版本 e ...
- Jmeter(五十三) - 从入门到精通高级篇 - 懒人教你在Linux系统中安装Jmeter(详解教程)
1.简介 我们绝大多数使用的都是Windows操作系统,因此在Windows系统上安装JMeter已经成了家常便饭,而且安装也相对简单,但是服务器为了安全.灵活小巧,特别是前几年的勒索病毒,现在绝大多 ...
- python进行linux系统监控
python进行linux系统监控 Linux系统下: 静态指标信息: 名称 描述 单位 所在文件 mem_total 内存总容量 KB /proc/meminfo disks 磁盘相关信息 - ...
- Python多进程库multiprocessing中进程池Pool类的使用[转]
from:http://blog.csdn.net/jinping_shi/article/details/52433867 Python多进程库multiprocessing中进程池Pool类的使用 ...
- rpm 系 linux 系统中 repo 文件中的 $release 到底等于多少?
rpm 系 linux 系统中 repo 文件中的 $release 到底等于多少? 结论 对于 8 来说,通过以下命令 #/usr/libexec/platform-python -c 'impor ...
- 在Linux系统中安装caffe
学习深度学习已经很久了,但一直没有自己动手安装过caffe,因为工作需要,需要在linux系统中安装caffe,因此,在这里对安装过程进行记录. caffe配置起来比tensorflow更麻烦一些,我 ...
- 在Linux系统中部署NodeJS项目
在Linux系统中部署NodeJS项目 安装NodeJS 首先进入 Node 官网,下载对应的 Node包 下载下来后是一个后缀为 xz 的压缩包,我们把这个包上传到 Linux 系统中的 /usr/ ...
- 在linux系统中安装VSCode(Visual Studio Code)
在linux系统中安装VSCode(Visual Studio Code) 1.从官网下载压缩包(话说下载下来解压就直接可以运行了咧,都不需要make) 访问Visual Studio Code官网 ...
随机推荐
- Hibernate 一对一关联映射,mappedBy参数解析
在最近java,SSH框架的学习中遇到了这样的一个问题,在Hibernate的开发中一对一关联映射的单向关联,主表会在次表新增一列次表的主键如下图,但是在双向关联中次表不会在表中创建主表的主键一列,这 ...
- Linux(CentOS 7)环境下安装MySQL
在CentOS中默认安装有MariaDB,但是我们需要的是MySQL,安装MySQL可以覆盖MariaDB MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 ...
- Mac HomeBrew 常用命令
mac 系统常用的软件安装工具就是 homebrew, 其最常用的命令如下: 安装(需要 Ruby):ruby -e "$(curl -fsSL https://raw.github.com ...
- Android_scaleType属性
这里我们重点理解ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType).android:scaleType ...
- 【Linux】 Linux权限管理与特殊权限
Linux权限管理 权限管理这方面,非常清楚地记得刚开始实习那会儿是仔细研究过的,不知道为什么没有笔记留痕..除了一些基本的知识点早就忘光了,无奈只好从头开始学习一遍.. ■ 基本权限知识 这部分实在 ...
- 19.C++-(=)赋值操作符、智能指针编写(详解)
(=)赋值操作符 编译器为每个类默认重载了(=)赋值操作符 默认的(=)赋值操作符仅完成浅拷贝 默认的赋值操作符和默认的拷贝构造函数有相同的存在意义 (=)赋值操作符注意事项 首先要判断两个操作数是否 ...
- 设计模式 --> (2)单例模式
单例模式 单例模式也称为单件模式.单子模式,可能是使用最广泛的设计模式.其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享.如系统的日志输出,GUI应用必须是单鼠标 ...
- 常用七大经典排序算法总结(C语言描述)
简介 其中排序算法总结如下: 一.交换排序 交换排序的基本思想都为通过比较两个数的大小,当满足某些条件时对它进行交换从而达到排序的目的. 1.冒泡排序 基本思想:比较相邻的两个数,如果前者比后者大,则 ...
- [poj2406]Power Strings_hash
Power Strings poj-2406 题目大意:询问一个字符串最多几个相同且连续的字符串构成(Eg:abababab由4个构成,abcd由1个构成). 注释:字符串长度为n,$1\le n\l ...
- /etc/nginx/nginx.conf配置文件详解
user nginx; #数值和cpu核数个数一致worker_processes 8; #worker与cpu绑定 worker_cpu_affinity 0001 0010 0100 1000 1 ...