2

我如何写给父母的字典?我已经为一些孩子提供了一个要检索的 url 列表,然后需要写入父母的字典:

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 {}}
4

1 回答 1

1

以下代码或多或少是您的,适用于处理manager.dict在 python 多处理文档中提到的传递。

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]

这里有几件事需要注意,它们是关键问题

  1. 这并不总是创建具有相同长度的字典。考虑到您现在可能在想什么(一些键被覆盖),我将字典更改为列表,并将 shared_dict[key] = value 更改为 shared_list.append((key,value))。正在进行覆盖,程序实际上也在写入可变数量的对。有时是三个,有时是两个,有时是四个。我已经在此处添加了代码以供您启发,但我实际上不会使用我发布的代码来做任何事情,永远
  2. idle. 您将希望使用 python .py 从命令行运行它。
  3. 我有没有提到除了测试之外你不应该使用这段代码来说“嗯,这确实工作得相当糟糕,不是吗?” 如果你能找到解决这个问题的方法,那么你就有更多的权力,但我不得不想象有一个更好的方法来设置它,完全回避这个问题。

无论你决定什么,祝你好运。不要使用我的代码。它运行并且不会给你恶意软件,但这就是它对它有利的全部。

于 2012-08-22T05:25:18.480 回答