2016-04-27 5 views
0

私が書いているより大きなコードを次のように作成しました。クラスでもある100個程度のスレッドを管理するために、複数のプロセスが必要です。マルチプロセスクラスが実際のプロセスにデータを格納していません

私は2つの問題があります.1つは、「追加」メソッドが実際に新しいプロセスに追加されていないようです。もう1つは、2,3、または4つのプロセスが作成されても、スレッドはすべて最初のメインプロセスでまだ開始されていることです。

次のコードはスレッドクラスを示していませんが、プロセスが正しく追加されていない理由を説明できれば、スレッドの部分を特定できます。

from time import sleep 
import multiprocessing 

class manager(multiprocessing.Process): 

    def __init__(self): 
     multiprocessing.Process.__init__(self) 
     self.symbols_list = [] 

    def run(self): 
     while True: 
      print "Process list: " + str(self.symbols_list) 
      sleep(5) 

    def add(self, symbol): 
     print "adding..." + str(symbol) 
     self.symbols_list.append(symbol) 
     print "after adding: " + str(self.symbols_list) 

if __name__ == "__main__": 
    m = manager() 
    m.start() 
    while True: 
     m.add("xyz") 
     raw_input() 

次のように出力されている:あなたは、新しいプロセスを作成する場合

adding...xyz 
after adding: ['xyz'] 
Process list: [] 

adding...xyz 
after adding: ['xyz', 'xyz'] 

adding...xyz 
after adding: ['xyz', 'xyz', 'xyz'] 
Process list: [] 

答えて

0

、子1が親のメモリを継承しますが、それは独自のコピーを持っています。

したがって、1つのプロセスの変更は、もう一方のプロセスでは表示されません。

プロセス内でデータを共有するには、Queueを使用することをお勧めします。

あなたの場合は、how to share data within processesをご覧ください。キューまたはパイプ経由でプロセスを同期させるよりもやや難しいことに注意してください。

関連する問題