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 相关文章推荐
Django中处理出错页面的方法
Jul 15 Python
python字符串与url编码的转换实例
May 10 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
Python generator生成器和yield表达式详解
Aug 08 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
python 实现按对象传值
Dec 26 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
python matplotlib库的基本使用
Sep 23 Python
python re.match()用法相关示例
Jan 27 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注入实例
2006/10/09 PHP
php 删除数组元素
2009/01/16 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
ext for eclipse插件安装方法
2008/04/27 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
django 实现电子支付功能的示例代码
2018/07/25 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
英文商务邀请信
2014/01/22 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
详解mysql三值逻辑与NULL
2021/05/19 MySQL