問題非常類似于:在字典多處理中添加值
想用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)沒有創建子字典一樣,因此,我在下一行收到一個 Key 錯誤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)
uj5u.com熱心網友回復:
我通過創建一個臨時 dictd然后分配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)
uj5u.com熱心網友回復:
你應該像@Albin Paul 所說的那樣使用dic[user] = manager.dict()或d = {}和dic[user] = d。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/362938.html
