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发送HTTP请求的方法小结
Jul 08 Python
python UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
Django CBV类的用法详解
Jul 26 Python
python爬虫 正则表达式解析
Sep 28 Python
详解基于python的图像Gabor变换及特征提取
Oct 26 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
分享提高 Python 代码的可读性的技巧
Mar 03 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.MVC的模板标签系统(三)
2006/09/05 PHP
最简单的PHP程序--记数器
2006/10/09 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
异步加载script的代码
2011/01/12 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
Django密码系统实现过程详解
2019/07/19 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
pyqt5中动画的使用详解
2020/04/01 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
Python常用数据分析模块原理解析
2020/07/20 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
Java语言程序设计测试题判断题部分
2013/01/06 面试题
教师队伍管理制度
2014/01/14 职场文书
森林防火工作方案
2014/02/14 职场文书
应届生面试求职信
2014/07/02 职场文书
2014教师年度工作总结
2014/11/10 职场文书
慰问信格式规范
2015/03/23 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书