1. 进程的注意点介绍

  1. 进程之间不共享全局变量
  2. 主进程会等待所有的子进程执行结束再结束

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进程的注意点(进程之间不共享全局变量、主进程会等待所有的子进程执行结束再结束)相关推荐

  1. python线程的注意点(线程之间执行是无序的、主线程会等待所有的子线程执行结束再结束(守护主线程)、线程之间共享全局变量、线程之间共享全局变量数据出现错误问题(线程等待(join)、互斥锁))

    1. 线程的注意点介绍 线程之间执行是无序的 主线程会等待所有的子线程执行结束再结束 线程之间共享全局变量 线程之间共享全局变量数据出现错误问题 2. 线程之间执行是无序的 import thread ...

  2. python 多线程和协程结合_一文讲透 “进程、线程、协程”

    本文从操作系统原理出发结合代码实践讲解了以下内容: 什么是进程,线程和协程? 它们之间的关系是什么? 为什么说Python中的多线程是伪多线程? 不同的应用场景该如何选择技术方案? ... 什么是进程 ...

  3. python打开一个软件并进行操作_python程序中的进程操作

    之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序也是一个进程 ...

  4. 线程与进程之间的共享资源

    线程和进程之间的共享资源方式 进程之间的共享资源的方式 1.消息队列 2.共享内存 3.管道(有名管道.无名管道) 4.信号 5.套接字 同一个进程的不同线程之间可以共享的资源 1.堆,由于堆是在进程 ...

  5. python全栈(一)网络通信与服务器之多任务-进程

    将上传一些test的代码: 地址后续补上 目录 前言 一. 进程以及状态 1.概念辨析 2.进程的状态 二.进程的创建-multiprocessing 三.进程和线程对比 1. 功能: 2. 运行原理 ...

  6. 第八节 Electron主进程和渲染进程之间的通信

    系列文章目录 第一节 electron 介绍 第二节 创建electron项目并启动 第三节 Electron运行流程 . 主进程渲染进程并使用nodejs 第四节 Electron 调用H5事件结合 ...

  7. electron 渲染进程调用主进程_万物皆可快速上手之Electron(第一弹)

    (给前端大全加星标,提升前端技能) 作者: 前端森林 公号 /  前端森林 (本文来自作者投稿) 最近在开发一款桌面端应用,用到了Electron和React. React作为日常使用比较频繁的框架, ...

  8. electron 主进程与渲染进程通讯

    主进程和渲染器进程 Electron 有两种进程:主进程和渲染进程. 主进程通过创建 BrowserWindow 实例来创建 网页. 每一个 BrowserWindow 实例在其渲染过程中运行网页, ...

  9. 多进程之间共享全局变量 python实现

    线程之间是可以正常共享全局变量的,因为是共用同一片空间的,而进程之间所使用的是不同的内存空间 所以线程之间可以共享全局变量,因为共用一片空间 不同进程使用不同的空间,所以使用的资源本质上是不同的,所以 ...

最新文章

  1. 【组队学习】【28期】基于Python的会员数据化运营
  2. [c/c++] programming之路(28)、结构体存储和内存对齐+枚举类型+typedef+深拷贝和浅拷贝...
  3. 禅道开源项目管理软件正式发布2.3版本
  4. ocjp 31-40
  5. 【渗透测试】一次授权的渗透测试——建议收藏
  6. Winform中自定义ZedGraph右键复制成功后的提示
  7. Fraction+mysql_MySQL 数据类型总结
  8. 简述python的特性_Python的特性概要
  9. 状态机fsm_Verilog专题(三十二)101 Sequence Recognition Mealy FSM(101序列识别状态机)...
  10. ppt 2 html工具,PPTools PPT2HTML
  11. python makefile
  12. 谷歌AI掌门人Jeff Dean获冯诺依曼奖;微软计划自研PC和服务器芯片;Ruby 3.0 RC1发布|极客头条...
  13. 自动化运维工具(ansible入门教程)
  14. JBPM节点分支之Group节点分析
  15. 【云存储】企业云存储管理解决方案
  16. lpush rpush 区别_php-redis中文参考手册_list容器相关_lPush_rPush_lPushx_rPu...
  17. apollo之集群部署(二)
  18. 上线啦,可以定时周期性提醒群成员的机器人
  19. 托托又来了——PCA实现人脸识别
  20. EditPlus设置Java代码格式化

热门文章

  1. 如何让机器像人一样多角度思考?协同训练来帮你
  2. 联手中科大、浙大、华科大等高校,阿里研发4项最新AI安全技术
  3. 11项重大发布!百度大脑语言与知识技术峰会全程高能
  4. 100多次竞赛后,他研发了一个几乎可以解决所有机器学习问题的框架
  5. 你和人工智能的对话,正在被人工收听
  6. 性能全面超数据库专家,腾讯提基于机器学习的性能优化系统 | SIGMOD 2019
  7. 终于把微软BING搜索-SPTAG算法的原理搞清了
  8. 魔法科技迈吉客未来起飞路径猜想
  9. Google 的自动驾驶车出事故,被人类撞的
  10. 硅谷初创公司工资期权调查报告出炉,你羡慕吗?