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的re模块应用实例
Sep 26 Python
Python定时执行之Timer用法示例
May 27 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
对python csv模块配置分隔符和引用符详解
Dec 12 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
Apr 30 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 Python
python自动生成sql语句的脚本
Feb 24 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的日期与时间函数技巧
2008/04/24 PHP
PHP SQLite类
2009/05/07 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
跟老齐学Python之有点简约的元组
2014/09/24 Python
python对json的相关操作实例详解
2017/01/04 Python
Android分包MultiDex策略详解
2017/10/30 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
Python3几个常见问题的处理方法
2019/02/26 Python
python用for循环求和的方法总结
2019/07/08 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
Python求凸包及多边形面积教程
2020/04/12 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
百度吧主申请感言
2014/01/12 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
读书之星事迹材料
2014/05/12 职场文书
红色故事演讲稿
2014/05/22 职场文书
男方婚前保证书
2015/02/28 职场文书
社会实践活动总结格式
2015/05/11 职场文书
家长意见书
2015/06/04 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android
Python如何用re模块实现简易tokenizer
2022/05/02 Python