如何给 parent 的字典写信?我已经给了一些 url 列表给一些 child 检索,然后需要写入 parent 的字典:
from multiprocessing import Pool
import random
parent_dict={}
urls = ['www.yahoo.com','www.google.com','www.microsoft.com','www.apple.com','www.cisco.com']
def workit(url):
# retrieve the urls, process some stuff and then add that info to parent_dict
key = random.randrange(1,10) # pretend that this is the variable that we want in parent_dict
value = random.randrange(11,20)
parent_dict[key] = value
pool = Pool(processes = 5)
pool.map(workit,urls)
print parent_dict # returns {}}
请您参考如下方法:
以下代码或多或少是您的代码,用于处理 python 多处理文档中提到的 manager.dict 的传递。
from multiprocessing import Pool
from multiprocessing import Manager
import random
manager = Manager()
dproxy = manager.dict()
urls = ['www.yahoo.com','www.google.com','www.microsoft.com','www.apple.com','www.cisco.com']
def f(url):
shared_dict = dproxy[0]
key = random.randrange(1,10)
value = random.randrange(11,20)
shared_dict[key] = value
dproxy[0] = shared_dict
if __name__ == '__main__':
dproxy[0] = {}
pool = Pool(processes=5)
pool.map(f, urls)
print dproxy[0]
这里有几件事需要注意是关键问题:
- 这并不总是创建具有相同长度的字典。想想你现在可能在想什么(一些键被覆盖),我将字典更改为列表并将 shared_dict[key] = value 更改为 shared_list.append((key,value))。覆盖正在进行但程序实际上也在写入可变数量的对。有时是三个,有时是两个,有时是四个。我已在此处添加代码以供您启发但我实际上不会使用我发布的代码做任何事情
- 从
idle运行时,这表现不佳。您需要使用 python .py 从命令行运行它。 - 我有没有提到过除了测试之外你不应该使用这段代码说“哈,那确实工作得相当糟糕,不是吗?”如果您能找到解决问题的方法,那么您将获得更多权力,但我必须想象有更好的方法来设置它,从而完全回避问题。
无论你做什么决定,祝你好运。不要使用我的代码。它运行并且不会给你恶意软件,但这就是它的全部优点。
