python - добавление значений в словарь многопроцессорной обработки - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужно добавить значения в словарь, используя параллелизм, в коде ниже я использовал multiprocessing.Process для вызова функции, которая должна записать значение в словаре, но это не

import multiprocessing
import random
manager = multiprocessing.Manager()

users = [1, 2, 3, 4, 5, 6, 7, 8, 9, 100]

def random_numer_check(user, dict):
        dict[user] = random.randint(0, 1000)


if __name__ == '__main__':

    return_dict = manager.dict()
    jobs = []
    for i in range(10):
        p = multiprocessing.Process(target=random_numer_check, args=(users, return_dict))
        jobs.append(p)
        p.start()

    for proc in jobs:
        proc.join()

Я ожидал, что результат print (return_dict) будет выглядеть как

{1: 169, 2: 520, 3: 637, 4: 559, 5: 497, 6: 470, 7: 113, 8: 221, 9: 946, 100: 69}

Но он просто возвращает пустой словарь

1 Ответ

0 голосов
/ 10 апреля 2020

Кажется, в вашем коде есть несколько ошибок. Вы пытаетесь передать весь список пользователей на random_number_check. Поскольку списки являются типом, который не подлежит изменению, они не могут быть легко переданы в многопроцессорный процесс.

Код ниже будет работать, хотя я бы посоветовал изменить ваш код в соответствии с правилами стиля Python.

import multiprocessing
import random

users = [1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
manager = multiprocessing.Manager()


def random_number_check(user, dic):
    dic[user] = random.randint(0, 1000)


if __name__ == '__main__':
    return_dict = manager.dict()

    jobs = []
    for i in range(10):
        # Pass the user at position i instead of the whole list
        p = multiprocessing.Process(target=random_number_check, args=(users[i], return_dict))
        jobs.append(p)
        p.start()

    for proc in jobs:
        proc.join()

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