代码之家  ›  专栏  ›  技术社区  ›  Vishal

更新模块级共享词典

  •  0
  • Vishal  · 技术社区  · 15 年前

    我可以想出一个解决方案,用一个新数据构造一个临时字典,并将其分配给“d”,但不确定它是如何工作的!

    感谢你的想法。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Alex Martelli    15 年前

    可能最好——在模块级:

    import threading
    dlock = threading.Lock()
    d = {}
    

    每一个 访问 d 只是修改!)在一个 with

    with dlock:
        found = k in d
    

    诸如此类(如果您使用的是python2.5,那么还需要 from __future__ import with_statement 在模块顶部)。

    这样可以保护 d d 否则,即使在“类读取”操作中也可能会遇到问题( if k in d: d.get(k) ,等等)如果dict“从操作的右下方更改,则在操作的中间进行smack”。

    替代体系结构可以基于对字典的包装(或者用锁保护它所需的所有方法,或者委托一个特殊用途的线程来执行所有字典操作,并通过 Queue.Queue 但我认为,在这种特殊情况下,简单的、不花哨的解决方案是最好的。