[英]Communicating between processes Python
我正在嘗試找出一個進程會告訴另一個進程某些值已更改的解決方案。
import multiprocessing
import time
class Consumer(multiprocessing.Process):
def __init__(self, share):
super().__init__()
self.share = share
def run(self):
print (self.share)
self.share = "xxx"
share = "ssss"
A = Consumer(share)
B = Consumer(share)
if __name__ == '__main__':
A = Consumer(share)
A.start()
time.sleep(5)
B = Consumer(share)
B.start()
期望在 B 運行時打印“xxx”。 但將“ssss”作為初始值。
經過一些研究,multiprocess.manager package 可以用來實現它。 但是出於速度的考慮,即100個進程,訪問share值的頻率很高,鎖會成為瓶頸。
有沒有辦法在更改值但讀取時能夠鎖定 object?
使用manager
跨進程共享對象:
import multiprocessing
import time
class Consumer(multiprocessing.Process):
def __init__(self, manager_namespace):
super().__init__()
self.share = manager_namespace
def run(self):
print (self.share.myString)
self.share.myString = "xxx"
if __name__ == '__main__':
manager = multiprocessing.Manager()
namespace = manager.Namespace()
namespace.myString = 'sss'
B = Consumer(namespace)
A = Consumer(namespace)
A.start()
time.sleep(5)
B = Consumer(namespace)
B.start()
至少在我的系統中,它提供了所需的 output。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.