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

 更新时间:2020年04月25日 14:48:09   作者:JackLiu16  
这篇文章主要介绍了python多进程 主进程和子进程间共享和不共享全局变量实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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() ,双向通信)。

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多进程 主进程和子进程间共享和不共享全局变量实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mac上Python使用ffmpeg完美解决方案(避坑必看!)

    Mac上Python使用ffmpeg完美解决方案(避坑必看!)

    ffmpeg是一个强大的开源命令行多媒体处理工具,下面这篇文章主要给大家介绍了关于Mac上Python使用ffmpeg完美解决方案的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Python学习之二叉树实现的示例详解

    Python学习之二叉树实现的示例详解

    这篇文章主要为大家详细介绍了Python实现二叉树的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-04-04
  • 使用Python绘制可爱的招财猫

    使用Python绘制可爱的招财猫

    招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用 Python 和 matplotlib 库从零开始绘制一只可爱的卡通招财猫,感兴趣的小伙伴跟着小编一起来看看吧
    2025-01-01
  • 关于数据分析之滚动窗口pandas.DataFrame.rolling方法

    关于数据分析之滚动窗口pandas.DataFrame.rolling方法

    Pandas库中的rolling方法是数据处理中常用的功能,它允许用户对数据进行滚动窗口(滑动窗口)操作,通过指定窗口大小,可以使用不同的聚合函数对窗口内的数据进行计算,例如最大值、最小值、平均值、中位数等,此外,rolling方法还可以计算方差、标准差、偏度、峰度
    2024-09-09
  • 浅谈flask截获所有访问及before/after_request修饰器

    浅谈flask截获所有访问及before/after_request修饰器

    这篇文章主要介绍了浅谈flask截获所有访问及before/after_request修饰器,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 巧妙使用python opencv库玩转视频帧率

    巧妙使用python opencv库玩转视频帧率

    这篇文章主要介绍了巧妙使用python opencv库玩转视频帧率的教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Python协程的用法和例子详解

    Python协程的用法和例子详解

    这篇文章主要为大家详细介绍了Python协程的用法和例子,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 用Python实现斐波那契(Fibonacci)函数

    用Python实现斐波那契(Fibonacci)函数

    这篇文章主要介绍了用Python实现斐波那契(Fibonacci)函数的相关资料,需要的朋友可以参考下
    2016-03-03
  • 基于python详解PyScript到底是什么

    基于python详解PyScript到底是什么

    这篇文章主要介绍了基于python详解PyScript到底是什么?文章围绕主题展开详细的内容介绍,具有一定的参考价值需要的朋友可以参考一下下面文章内容
    2022-06-06
  • python基础之while循环、for循环详解及举例

    python基础之while循环、for循环详解及举例

    所谓循环结构就是程序中控制某条或某些指令重复执行的结构,下面这篇文章主要给大家介绍了关于python基础之while循环、for循环的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04

最新评论