Как создать словарь списка менеджера, который может использоваться несколькими процессами? - PullRequest
0 голосов
/ 22 октября 2019

Я хочу поделиться списком словарей между несколькими процессами, например, следующим:

msgs = [{ 1: "A", 2: "B"}, 
        {20 : "AAA", 30 : "BBB"}, 
        {100 : "777", 200 : "888"}]

Я смотрел другие посты о том, как использовать диалоги Manager, но они не показывают, чтобы сделатьсписок другого типа (в данном случае, dict)

Например: как разделить словарь между несколькими процессами?

^ К сожалению, я не смограсширить то, что я хочу. Кроме того, я не использую пул процессов. У меня есть 3 отдельных процесса, которые я создал.

Может ли кто-нибудь показать мне пример того, как составить список словарей, которые могут быть общими для всех процессов?

1 Ответ

0 голосов
/ 23 октября 2019

Если вы хотите поделиться своими словарями в списке, вам нужно не только создать список, но и словари через Manager(). Например,

msg = manager.list()
msg.append(manager.dict({ 1: "A", 2: "B"}))

В противном случае изменения вашего словаря внутри процесса не будут зарегистрированы. Возможно, вы захотите посмотреть этот ответ для получения подробной информации.

Расширенная версия связанного примера может выглядеть примерно так:

from multiprocessing import Process, Manager

def f(msg):
    for ele in msg:
        if 1 in ele:
            ele[1] += "hi"
        if 100 in ele:
            ele[100] += "5"

if __name__ == '__main__':
    manager = Manager()

    msg = manager.list()
    msg.append(manager.dict({ 1: "A", 2: "B"}))
    msg.append(manager.dict({20 : "AAA", 30 : "BBB"}))
    msg.append(manager.dict({100 : "777", 200 : "888"}))

    p1 = Process(target=f, args=(msg,))
    p2 = Process(target=f, args=(msg,))
    p3 = Process(target=f, args=(msg,))

    p1.start()
    p2.start()
    p3.start()
    p1.join()
    p2.join()
    p3.join()

    for d in msg:
        print(str(d))

В результате на выходе

{1: «Ahihihi», 2: «B»}

{20: «AAA», 30: «BBB»}

{100: '777555', 200:' 888 '}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...