python類庫32[多進程共享高級之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') 

 

完! 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM