繁体   English   中英

python - 在字典多处理中添加值

[英]python - adding values in dictionary multiprocessing

我需要使用并行性在字典中添加值,在下面的代码中,我使用了 multiprocessing.Process 来调用 function 应该在字典中写入值,但它没有

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}

但它只返回空字典

您的代码中似乎有一些错误。 您正在尝试将整个用户列表传递给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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM