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

如何在python中共享数据(每分钟更新一次)accoss模块?

  •  2
  • Vishal  · 技术社区  · 16 年前

    我在许多文章中读到全局变量是坏的,但我需要它们!

    我的处境:

    我在一个专用的模块中定义了几个变量,这些变量每分钟更新一次,并被应用程序中的其他模块使用。(阅读后实施 this )你认为这是一个好方法,还是需要改进或更好的想法?

    谢谢

    2 回复  |  直到 16 年前
        1
  •  4
  •   Ryan Ginstrom    16 年前

    这听起来是个不错的地方 pub/sub technique ,其中有对象监视更改。当您需要在某个小部件显示的值发生变化时更新该小部件时,这在类似guis的情况下非常有用。

    非常简单的事情:

    >>> class Widget(object):
        def __init__(self, name, val):
            self.name = name
            self.val = val
        def update(self, val):
            self.val = val
            print self.name, "changed to", self.val
    
    
    >>> def update(updateables, val):
        for u in updateables:
            u(val)
    
    
    >>> w1, w2 = Widget("Alpha", 5), Widget("Beta", 6)
    >>> updateables = [w1.update, w2.update]
    >>> update(updateables, 17)
    Alpha changed to 17
    Beta changed to 17
    

    其思想是,值的“观察者”注册一个回调,每当该值发生变化时都会调用该回调。

        2
  •  0
  •   gomad    16 年前

    我觉得没关系。您实际上没有使用globals(如中使用“global”关键字)。您正在导入一个模块,然后从其他模块访问该模块。对我来说似乎是个很好的解决办法。

    你在移动多少数据?因为您可以使用数据存储,比如sqlite,并且每个模块可以根据需要读写数据存储。但是随着每一分钟的更新,您可能不需要持久性或关系,使您现有的解决方案更简单。

    [稍后编辑]

    想想看,内存中的sqlite数据库可能会达到您的最佳位置: http://www.sqlite.org/inmemorydb.html