簡體   English   中英

進程間通信 Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM