想请问各位大大,小弟在跑多进程使用pool时候,遇到参数进到子进程之后,会出现
更后面才可能出现的参数,参数在不同循环都不同,所以用i来替代,下面是简化过的
程式,里面的code可执行,总共有4个问题想请教
https://replit.com/@bqt978/123#main.py
from multiprocessing import Pool
def task(i,dict1,dict2):
print("in 正确值 %s | dict2值 %s| dict1值i1 %s| dict1值i2
%s"%(i,dict2["i"],dict1["i1"],dict1["i2"]))
def fun(i):
dict2 = {}
dict2["i"] = str(i)
return dict2
if __name__=='__main__':
dict1 = {}
p = Pool(4)
for i in range(500):
dict2 = fun(i)
dict1["i1"] = str(i)
dict1["i2"] = dict2["i"]
print("out 正确值 %s | dict2值 %s| dict1值i1 %s| dict1值i2
%s"%(i,dict2["i"],dict1["i1"],dict1["i2"]))
p.apply_async(task, args=(i,dict1,dict2))
print('Waiting for all subprocesses done...')
p.close()
p.join()
print('All subprocesses done.')
'''
1.请问为什么 i 当成字典的值差别在进入一个函数后赋予到字典,就能正确显示?
而直接赋予字典就会跑掉??
2.请问为什么外部值都是正确 进去task就会出错??
3.发现如果我把dict1 放到for循环内再去生成,就不会有问题,请问为什么?
4.把 dict1 的 dict1["i1"] = str(i) 和 ict1["i2"] = dict2["i"]放到task之后再去
印出来也没问题,请问为什么?
'''