0

Python の新しく強力な世界を探求している人として、私は自分のコーディングの理解の問題に直面しています。誰かが私を助けてくれれば幸いです。

私の問題を簡単にするために、例を作成しました。たとえば、マルチプロセッシングを同時に実行する 2 つの関数があるとします。1 つは永続的なデータ リスナーで、もう 1 つはその値を出力します。さらに、データを所有するオブジェクトが 1 つあります。データは set/get を介して設定されます。したがって、課題は、データをグローバルに配置せずに、両方の関数がデータにアクセスできるようにする方法です。私の理解不足は、関数間でオブジェクトを転送する方法のどこかにあると思います。

注 : 両方の関数が同期している必要はなく、while は単に無限ループ用です。それは、データをどのように持ち込むかだけです。

これにより、次のようなコードが得られます(アイデアを得るために、機能していないことはわかっています):

import multiprocessing

#simply a data object
class data(object):
    def __init__(self):
    self.__value = 1

    def set_value(self, value):
        self.__value = value

    def get_value(self):
        return self.__value      

# Data listener
def f1(count):
    zae = 0
    while True:
        zae += 1       
        count.set_value = zae

def f2(count):
    while True:
        print (count.get_value)    

#MainPart
if __name__ == '__main__':
print('start')
count = data()

jobs = []
p1 = multiprocessing.Process(target =f1(count))
p2 = multiprocessing.Process(target =f2(count))
jobs.append(p1)
jobs.append(p2)

p1.start()   
p2.start() 

print ('end')

私を啓発してください、

エイドリアンモンクよろしく

4

2 に答える 2

0

Pipe または Queueからの通信チャネルmultiprocessingは、まさにこの種の問題を解決するように設計されています。

于 2013-05-23T19:57:14.637 に答える
0

これは、メモリ マップト ファイルを使用する適切なケースのように見えます。

あるプロセスがファイルをメモリーマップし (たとえば F)、別のプロセスが同じファイルをマップする (つまり、F.fileno() にもマップする) 場合、まったく同じメモリーブロックが 2 番目のプロセスのアドレス空間にマップされます。これにより、2 つのプロセスが共有メモリに書き込むことで、非常に迅速に情報を交換できます。.

もちろん、マッピングで適切なアクセス (読み取り、書き込みなど) を管理する必要があります。アプリケーションのロジックを満たすには、ファイル内の適切な場所を適切にポーリング/書き込みするだけです ( http:/を参照)。 /docs.python.org/2/library/mmap.html )。

于 2013-05-23T19:12:10.283 に答える