假设我有一个名为 dog 的类:
class dog():
def __init__(self, name, age):
self.name = name
self.age = age
self.fleas = []
现在假设我有一个名字列表,
names = ["bob", "joe", "dave"]
然后我创建一个列表,执行以下操作:
dogs = [dog(name, index) for index, name in enumerate(names)] # Creates a list "dogs" that has 3 dog classes in it, named bob, joe, david, with ages 0, 1, 2 respectively.
现在我有一本跳蚤词典,
global_fleas = {"bob":[flea_43], "joe":[flea_20], "dave":[flea_3]}
还有一些单独的方法 flea_mod() 可以修改这个字典,以便将每只狗的跳蚤编号更改为某个随机数,例如 flea_50。这本字典中的每只狗只会有一只跳蚤。
我可以通过执行以下操作将 global_fleas 中的跳蚤附加到其对应的狗:
def dirty_dog(dog):
dog.fleas.append(global_fleas[dog.name])
这是关键。我想多处理这个循环。这是我现在拥有的:
while True:
flea_mod() # This randomizes the flea_number for each dog in the global_flea dictionary
pool = multiprocessing.Pool(processes=len(dogs))
[pool.apply_async(dirty_dog, dog) for dog in dogs]
pool.close()
pool.join()
所以问题是每次循环运行时每个狗对象都不会保留其跳蚤列表。我希望在每个循环结束时保留每只狗的跳蚤列表,因此在两次循环后,每只狗将有两只跳蚤,依此类推。有任何想法吗?我猜我得腌制一些东西。
请您参考如下方法:
多处理文档建议尽可能不要共享状态,但您可以使用托管字典来实现您的目标:
http://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes
(请参阅基于服务器的管理器部分。)
这样您就可以根据您的核心逻辑更改单个托管对象,并且处理节点会看到更新后的版本。您必须在您的代码中尝试一下,看看最好的共享设置是什么(如果有的话!)。
