python多进程 主进程和子进程间共享和不共享全局变量实例


Posted in Python onApril 25, 2020

Python 多进程默认不能共享全局变量

主进程与子进程是并发执行的,进程之间默认是不能共享全局变量的(子进程不能改变主进程中全局变量的值)。

如果要共享全局变量需要用(multiprocessing.Value("d",10.0),数值)(multiprocessing.Array("i",[1,2,3,4,5]),数组)(multiprocessing.Manager().dict(),字典)(multiprocessing.Manager().list(range(5)))。

进程通信(进程之间传递数据)用进程队列(multiprocessing.Queue(),单向通信),管道( multiprocessing.Pipe() ,双向通信)。

python多进程 主进程和子进程间共享和不共享全局变量实例

import multiprocessing
import time
import os
 
datalist=['+++'] #全局变量,主进程与子进程是并发执行的,他们不能共享全局变量(子进程不能改变主进程中全局变量的值)
 
def adddata():
 global datalist
 datalist.append(1)
 datalist.append(2)
 datalist.append(3)
 print("子进程",os.getpid(),datalist)
 
 
if __name__=="__main__":
 
 p=multiprocessing.Process(target=adddata,args=())
 p.start()
 p.join()
 datalist.append("a")
 datalist.append("b")
 datalist.append("c")
 print("主进程",os.getpid(),datalist)

Python 进程之间共享数据(全局变量)

进程之间共享数据(数值型):

import multiprocessing
 
def func(num):
 num.value=10.78 #子进程改变数值的值,主进程跟着改变
 
if __name__=="__main__":
 num=multiprocessing.Value("d",10.0) # d表示数值,主进程与子进程共享这个value。(主进程与子进程都是用的同一个value)
 print(num.value)
 
 p=multiprocessing.Process(target=func,args=(num,))
 p.start()
 p.join()
 
 print(num.value)

进程之间共享数据(数组型):

import multiprocessing
 
def func(num):
 num[2]=9999 #子进程改变数组,主进程跟着改变
 
if __name__=="__main__":
 num=multiprocessing.Array("i",[1,2,3,4,5]) #主进程与子进程共享这个数组
 print(num[:])
 
 p=multiprocessing.Process(target=func,args=(num,))
 p.start() 
 p.join()
 
 print(num[:])

进程之间共享数据(dict,list):

import multiprocessing
 
def func(mydict,mylist):
 mydict["index1"]="aaaaaa" #子进程改变dict,主进程跟着改变
 mydict["index2"]="bbbbbb"
 mylist.append(11)  #子进程改变List,主进程跟着改变
 mylist.append(22)
 mylist.append(33)
 
if __name__=="__main__":
 with multiprocessing.Manager() as MG: #重命名
  mydict=multiprocessing.Manager().dict() #主进程与子进程共享这个字典
  mylist=multiprocessing.Manager().list(range(5)) #主进程与子进程共享这个List
 
  p=multiprocessing.Process(target=func,args=(mydict,mylist))
  p.start()
  p.join()
 
  print(mylist)
  print(mydict)

多线程用全局变量(global)

以上这篇python多进程 主进程和子进程间共享和不共享全局变量实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python命令行参数解析OptionParser类用法实例
Oct 09 Python
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
PyQt5实现简易计算器
May 30 Python
Pyqt5实现英文学习词典
Jun 24 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
Python-jenkins 获取job构建信息方式
May 12 Python
浅谈django 重载str 方法
May 19 Python
python学习将数据写入文件并保存方法
Jun 07 Python
python中数字是否为可变类型
Jul 08 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 #Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 #Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 #Python
解决python父线程关闭后子线程不关闭问题
Apr 25 #Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 #Python
python except异常处理之后不退出,解决异常继续执行的实现
Apr 25 #Python
python 追踪except信息方式
Apr 25 #Python
You might like
PHP 和 XML: 使用expat函数(一)
2006/10/09 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
php文件缓存类汇总
2014/11/21 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python 探针的实现原理
2016/04/23 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
图解Python变量与赋值
2018/04/03 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
如何安装ruby on rails
2014/02/09 面试题
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers