多处理无法创建字典结构
multiprocessing cannot create dictionary structure
问题非常类似于:Adding values in dictionary multiprocessing
我想用multiprocessing写字典更快,但是不知为何,multiprocessing函数只能写字典的第一层。这意味着,当使用上面的例子时,字典工作得很好。
但不是以随机数作为值的原始输出:
{1: 169, 2: 520, 3: 637, 4: 559, 5: 497, 6: 470, 7: 113, 8: 221, 9: 946, 100: 69}
我想要在这些词典中创建词典的功能。但是,我得到的输出是一个空字典,就好像子字典创建 dic[user][i] = random.randint(0, 1000)
没有发生一样,结果,我在下一行 print(dic[user][i])
.
中得到一个键错误
{3: {}, 1: {}, 8: {}, 5: {}, 2: {}, 9: {}, 100: {}, 7: {}, 4: {}, 6: {}}
为什么函数在多处理期间无法创建子字典?通常使用该函数确实会给出正确的输出。
import multiprocessing
import random
users = [1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
users2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
def random_number_check(user, dic, list2):
dic[user] = {}
print(list2)
for i in list2:
dic[user][i] = random.randint(0, 1000)
print(dic[user][i])
if __name__ == '__main__':
manager = multiprocessing.Manager()
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, users2))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
print(return_dict)
我通过创建一个临时字典 d
然后将 d
分配给 dict[user]
来让它工作。
def random_number_check(user, dic, list2):
d = {}
for i in list2:
d[i] = random.randint(0, 1000)
dic[user] = d
if __name__ == '__main__':
manager = multiprocessing.Manager()
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, users2))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
print(return_dict)
你应该使用 dic[user] = manager.dict()
或 d = {}
和 dic[user] = d
正如@Albin Paul 所说。
问题非常类似于:Adding values in dictionary multiprocessing
我想用multiprocessing写字典更快,但是不知为何,multiprocessing函数只能写字典的第一层。这意味着,当使用上面的例子时,字典工作得很好。
但不是以随机数作为值的原始输出:
{1: 169, 2: 520, 3: 637, 4: 559, 5: 497, 6: 470, 7: 113, 8: 221, 9: 946, 100: 69}
我想要在这些词典中创建词典的功能。但是,我得到的输出是一个空字典,就好像子字典创建 dic[user][i] = random.randint(0, 1000)
没有发生一样,结果,我在下一行 print(dic[user][i])
.
{3: {}, 1: {}, 8: {}, 5: {}, 2: {}, 9: {}, 100: {}, 7: {}, 4: {}, 6: {}}
为什么函数在多处理期间无法创建子字典?通常使用该函数确实会给出正确的输出。
import multiprocessing
import random
users = [1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
users2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
def random_number_check(user, dic, list2):
dic[user] = {}
print(list2)
for i in list2:
dic[user][i] = random.randint(0, 1000)
print(dic[user][i])
if __name__ == '__main__':
manager = multiprocessing.Manager()
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, users2))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
print(return_dict)
我通过创建一个临时字典 d
然后将 d
分配给 dict[user]
来让它工作。
def random_number_check(user, dic, list2):
d = {}
for i in list2:
d[i] = random.randint(0, 1000)
dic[user] = d
if __name__ == '__main__':
manager = multiprocessing.Manager()
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, users2))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
print(return_dict)
你应该使用 dic[user] = manager.dict()
或 d = {}
和 dic[user] = d
正如@Albin Paul 所说。