python进程的注意点(进程之间不共享全局变量、主进程会等待所有的子进程执行结束再结束)
1. 进程的注意点介绍
- 进程之间不共享全局变量
- 主进程会等待所有的子进程执行结束再结束
2. 进程之间不共享全局变量
import multiprocessing
import time# 定义全局变量
g_list = list()# 添加数据的任务
def add_data():for i in range(5):g_list.append(i)print("add:", i)time.sleep(0.2)# 代码执行到此,说明数据添加完成print("add_data:", g_list)def read_data():print("read_data", g_list)if __name__ == '__main__':# 创建添加数据的子进程add_data_process = multiprocessing.Process(target=add_data)# 创建读取数据的子进程read_data_process = multiprocessing.Process(target=read_data)# 启动子进程执行对应的任务add_data_process.start()# 主进程等待添加数据的子进程执行完成以后程序再继续往下执行,读取数据add_data_process.join()read_data_process.start()print("main:", g_list)# 总结: 多进程之间不共享全局变量
执行结果:
进程之间不共享全局变量的解释效果图:
创建子进程会对主进程资源进行拷贝,也就是说子进程是主进程的一个副本,好比是一对双胞胎,之所以进程之间不共享全局变量,是因为操作的不是同一个进程里面的全局变量,只不过不同进程里面的全局变量名字相同而已。
3. 主进程会等待所有的子进程执行结束再结束
假如现在创建一个子进程,这个子进程执行完大概需要2秒钟,现在让主进程执行0.5秒钟就退出程序,查看一下执行结果,示例代码如下:
import multiprocessing
import time# 定义进程所需要执行的任务
def task():for i in range(10):print("任务执行中...")time.sleep(0.2)if __name__ == '__main__':# 创建子进程sub_process = multiprocessing.Process(target=task)sub_process.start()# 主进程延时0.5秒钟time.sleep(0.5)print("over")exit()# 总结: 主进程会等待所有的子进程执行完成以后程序再退出
执行结果:
说明:
通过上面代码的执行结果,可以得知: 主进程会等待所有的子进程执行结束再结束
假如就让主进程执行0.5秒钟,子进程就销毁不再执行,那怎么办呢?
- 可以设置守护主进程 或者 在主进程退出之前 让子进程销毁
守护主进程:
- 守护主进程就是主进程退出子进程销毁不再执行
子进程销毁:
- 子进程执行结束
保证主进程正常退出的示例代码:
import multiprocessing
import time# 定义进程所需要执行的任务
def task():for i in range(10):print("任务执行中...")time.sleep(0.2)if __name__ == '__main__':# 创建子进程sub_process = multiprocessing.Process(target=task)# 设置守护主进程,主进程退出子进程直接销毁,子进程的生命周期依赖与主进程# sub_process.daemon = Truesub_process.start()time.sleep(0.5)print("over")# 让子进程销毁sub_process.terminate()exit()# 总结: 主进程会等待所有的子进程执行完成以后程序再退出# 如果想要主进程退出子进程销毁,可以设置守护主进程或者在主进程退出之前让子进程销毁
执行结果:
- 为了保证子进程能够正常的运行,主进程会等所有的子进程执行完成以后再销毁,设置守护主进程的目的是主进程退出子进程销毁,不让主进程再等待子进程去执行。
- 设置守护主进程方式: 子进程对象.daemon = True
- 销毁子进程方式: 子进程对象.terminate()
python进程的注意点(进程之间不共享全局变量、主进程会等待所有的子进程执行结束再结束)相关推荐
- python线程的注意点(线程之间执行是无序的、主线程会等待所有的子线程执行结束再结束(守护主线程)、线程之间共享全局变量、线程之间共享全局变量数据出现错误问题(线程等待(join)、互斥锁))
1. 线程的注意点介绍 线程之间执行是无序的 主线程会等待所有的子线程执行结束再结束 线程之间共享全局变量 线程之间共享全局变量数据出现错误问题 2. 线程之间执行是无序的 import thread ...
- python 多线程和协程结合_一文讲透 “进程、线程、协程”
本文从操作系统原理出发结合代码实践讲解了以下内容: 什么是进程,线程和协程? 它们之间的关系是什么? 为什么说Python中的多线程是伪多线程? 不同的应用场景该如何选择技术方案? ... 什么是进程 ...
- python打开一个软件并进行操作_python程序中的进程操作
之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序也是一个进程 ...
- 线程与进程之间的共享资源
线程和进程之间的共享资源方式 进程之间的共享资源的方式 1.消息队列 2.共享内存 3.管道(有名管道.无名管道) 4.信号 5.套接字 同一个进程的不同线程之间可以共享的资源 1.堆,由于堆是在进程 ...
- python全栈(一)网络通信与服务器之多任务-进程
将上传一些test的代码: 地址后续补上 目录 前言 一. 进程以及状态 1.概念辨析 2.进程的状态 二.进程的创建-multiprocessing 三.进程和线程对比 1. 功能: 2. 运行原理 ...
- 第八节 Electron主进程和渲染进程之间的通信
系列文章目录 第一节 electron 介绍 第二节 创建electron项目并启动 第三节 Electron运行流程 . 主进程渲染进程并使用nodejs 第四节 Electron 调用H5事件结合 ...
- electron 渲染进程调用主进程_万物皆可快速上手之Electron(第一弹)
(给前端大全加星标,提升前端技能) 作者: 前端森林 公号 / 前端森林 (本文来自作者投稿) 最近在开发一款桌面端应用,用到了Electron和React. React作为日常使用比较频繁的框架, ...
- electron 主进程与渲染进程通讯
主进程和渲染器进程 Electron 有两种进程:主进程和渲染进程. 主进程通过创建 BrowserWindow 实例来创建 网页. 每一个 BrowserWindow 实例在其渲染过程中运行网页, ...
- 多进程之间共享全局变量 python实现
线程之间是可以正常共享全局变量的,因为是共用同一片空间的,而进程之间所使用的是不同的内存空间 所以线程之间可以共享全局变量,因为共用一片空间 不同进程使用不同的空间,所以使用的资源本质上是不同的,所以 ...
最新文章
- 【组队学习】【28期】基于Python的会员数据化运营
- [c/c++] programming之路(28)、结构体存储和内存对齐+枚举类型+typedef+深拷贝和浅拷贝...
- 禅道开源项目管理软件正式发布2.3版本
- ocjp 31-40
- 【渗透测试】一次授权的渗透测试——建议收藏
- Winform中自定义ZedGraph右键复制成功后的提示
- Fraction+mysql_MySQL 数据类型总结
- 简述python的特性_Python的特性概要
- 状态机fsm_Verilog专题(三十二)101 Sequence Recognition Mealy FSM(101序列识别状态机)...
- ppt 2 html工具,PPTools PPT2HTML
- python makefile
- 谷歌AI掌门人Jeff Dean获冯诺依曼奖;微软计划自研PC和服务器芯片;Ruby 3.0 RC1发布|极客头条...
- 自动化运维工具(ansible入门教程)
- JBPM节点分支之Group节点分析
- 【云存储】企业云存储管理解决方案
- lpush rpush 区别_php-redis中文参考手册_list容器相关_lPush_rPush_lPushx_rPu...
- apollo之集群部署(二)
- 上线啦,可以定时周期性提醒群成员的机器人
- 托托又来了——PCA实现人脸识别
- EditPlus设置Java代码格式化