通过引用位编码的函数列表来传递dict

时间:2013-06-21 21:48:31

标签: python dictionary multiprocessing pass-by-reference python-multiprocessing

我似乎遇到一个Manager.dict()的问题,它被传递到一个函数列表(在一个子进程中),就像我在函数中修改它一样,新的值在外部不可用。 我创建了这样的函数列表:

gwfuncs = [reboot, flush_macs, flush_cache, new_gw, revert_gw, send_log]
gw_func_dict = dict((chr(2**i), gwfuncs[i]) for i in xrange(0,min(len(gwfuncs),8)))

然后像这样调用它:

for bit in gw_func_dict.keys():
    if gwupdate & ord(bit) == ord(bit):
        gw_func_dict[bit](fh, maclist)

现在假设我们正在谈论flush_macs(),无论我在maclist函数中做什么,似乎都没有影响我职能之外的maclist - 为什么会这样?如何以外部可用的更改方式对其进行修改?

1 个答案:

答案 0 :(得分:1)

==的{​​{3}}高于&,因此您的if语句的确如此:

if gwupdate & (ord(bit) == ord(bit)):

添加一些括号,它将起作用:

if (gwupdate & ord(bit)) == ord(bit):

此外,您可以稍微简化一下代码:

gw_func_dict = dict((chr(2**i), func) for i, func in enumerate(gwfuncs[:8]))

如果您使用的是Python 2.7 +:

gw_func_dict = {chr(2**i): func for i, func in enumerate(gwfuncs[:8])}

此外,默认情况下,遍历字典会迭代其键,因此您可以从.keys()循环中删除for

for bit in gw_func_dict: