当前位置: 首页 > 编程笔记 >

Python multiprocessing.Manager介绍和实例(进程间共享数据)

裴意
2023-03-14
本文向大家介绍Python multiprocessing.Manager介绍和实例(进程间共享数据),包括了Python multiprocessing.Manager介绍和实例(进程间共享数据)的使用技巧和注意事项,需要的朋友参考一下

Python中进程间共享数据,处理基本的queue,pipe和value+array外,还提供了更高层次的封装。使用multiprocessing.Manager可以简单地使用这些高级接口。

Manager()返回的manager对象控制了一个server进程,此进程包含的python对象可以被其他的进程通过proxies来访问。从而达到多进程间数据通信且安全。

Manager支持的类型有list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value和Array。

1) Manager的dict,list使用


import multiprocessing

import time

def worker(d, key, value):     d[key] = value

if __name__ == '__main__':     mgr = multiprocessing.Manager()     d = mgr.dict()     jobs = [ multiprocessing.Process(target=worker, args=(d, i, i*2))              for i in range(10)              ]     for j in jobs:         j.start()     for j in jobs:         j.join()     print ('Results:' )     for key, value in enumerate(dict(d)):         print("%s=%s" % (key, value))         # the output is : # Results: # 0=0 # 1=1 # 2=2 # 3=3 # 4=4 # 5=5 # 6=6 # 7=7 # 8=8 # 9=9

上面为manager.dict的使用实例。

2)namespace对象没有公共的方法,但是有可写的属性。

然而当使用manager返回的namespace的proxy的时候,_属性值属于proxy,跟原来的namespace没有关系。


>>> manager = multiprocessing.Manager()

>>> Global = manager.Namespace()

>>> Global.x = 10

>>> Global.y = 'hello'

>>> Global._z = 12.3    # this is an attribute of the proxy

>>> print(Global)

Namespace(x=10, y='hello') 

 类似资料:
  • 本文向大家介绍C++进程间共享数据实例,包括了C++进程间共享数据实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++进程间共享数据的实现方法,分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C++程序设计有所帮助。

  • 本文向大家介绍python 进程间数据共享multiProcess.Manger实现解析,包括了python 进程间数据共享multiProcess.Manger实现解析的使用技巧和注意事项,需要的朋友参考一下 一、进程之间的数据共享 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据。 这样极大地减少了对使用锁定和其他同步

  • 本文向大家介绍MySQL全局共享内存介绍,包括了MySQL全局共享内存介绍的使用技巧和注意事项,需要的朋友参考一下 前言 全局共享内存则主要是 MySQL Instance(mysqld进程)以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如存储查询缓存的 Query Cache,缓存连接线程的 Thread Cache,缓存表文件句柄信息的 Table Cache,缓存二进制日志的 Bi

  • 问题内容: 我正在尝试使用部分函数,​​以便pool.map()可以定位具有多个参数(在本例中为Lock()对象)的函数。 这是示例代码(摘自我之前的问题的答案): 但是,当我运行此代码时,出现错误: 我在这里想念什么?如何在子流程之间共享锁? 问题答案: 您不能将普通对象传递给方法,因为它们不能被腌制。有两种方法可以解决此问题。一种是创建并传递一个: 不过,这有点重量级;使用需要产生另一个进程来

  • 本文向大家介绍Lua进阶教程之闭包函数、元表实例介绍,包括了Lua进阶教程之闭包函数、元表实例介绍的使用技巧和注意事项,需要的朋友参考一下 Upvalue:一个函数所使用的定义在它的函数体之外的局部变量(external localvariable)称为这个函数的upvalue。 在前面的代码中,函数countDown使用的定义在函数createCountdownTimer中的局部变量ms就是co

  • 我要的是这种行为: 当然,当我打印时真正发生的是: 显然,它们在类中共享数据。我如何获得单独的实例来实现我想要的行为?