@Stormx480
Python Backend Developer

Multiprocessing и словари, как обработать?

Задача:
Нужно инициализировать процесс, запустить функцию обработчик, получить последнее значение из списка с помощью 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()
  • Вопрос задан
  • 480 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Специально для этого есть пул процессов и его метод map().
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы