Задача:
Нужно инициализировать процесс, запустить функцию обработчик, получить последнее значение из списка с помощью pop(), сам список является значением к определенному ключу в словаре, обработать это значение и закрыть процесс.
Форма:
Старт процесса - Вызов функции обработчика - Вызов функции для получения значения из списка в словаре по ключу - Обработка значения - Закрытие процесса
Проблема:
При инициализации процесса, он(процесс). как бы, дублирует класс и работает с его значениями отдельно от всей остальной программы и других процессов, не синхронизируя данные, от чего вся программа постоянно обрабатывает одно и тоже значение. А сам pop() работает не корректно, возвращая каждый раз последнее значение из списка, но не удаляя его.
Что пытался делать:
Value, Array, manager.dict(), global, обновлять словарь вручную, махнуть Process на threading.
Структура класса:
class Example():
dict = {}
def get_param(self, n):
#получение значения
def wrapper(self, n):
#На вход принимает ключ к словарю
param = self.get_param(n)
#обработка param и тд
def start(self):
#Запускает процесс который вызывает функцию proc
def proc(self):
#Запускает процесс который вызывает функцию обработчик
Код который НЕ работает:
import multiprocessing
dicts = {}
def gen(n):
list = dicts[str(n)]
print(list)
if len(list) > 0:
return list.pop()
def proc(n, dicte):
global dicts
dicte['10'] = ['hello', 'how are', 'you']
dicts = dicte
a = gen(n)
print(a)
b = gen(n)
print(b)
if __name__ == '__main__':
manager = multiprocessing.Manager()
dict = manager.dict()
p1 = multiprocessing.Process(target=proc, args=(10, dict))
p1.start()
p1.join()