2016-04-27 1 views
0

Я сделал следующий пример более крупного кода, который я пишу. Я хотел бы, чтобы несколько процессов управляли 100 потоками, которые также являются классами.Multi-process Class не хранит данные в реальном процессе

У меня есть две проблемы: одна из них заключается в том, что метод «добавить» действительно не добавляет к новому процессу. Другое заключается в том, что даже при создании 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

При создании нового процесса, ребенок один наследует память родителя, но она имеет свою собственную копию.

Поэтому изменения в одном процессе не будут видны на другом.

Для обмена данными в рамках процессов наиболее рекомендуемый подход использует Queue.

В вашем случае вы можете взглянуть на how to share data within processes. Имейте в виду, что это немного сложнее, чем синхронизация процессов через очереди или каналы.