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

时间:2010-05-26 16:18:21

标签: python

我在很多帖子中都读到全局变量很糟糕,但我需要它们!

我的情况:

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

由于

2 个答案:

答案 0 :(得分:4)

这听起来像pub/sub technique的好地方,在那里你有对象注意变化。当GUI需要在显示的值发生变化时更新某些小部件时,这在GUI等方面非常有用。

非常简单:

>>> 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

这个想法是值的“观察者”注册了一个回调,只要该值发生变化就会被调用。

答案 1 :(得分:0)

我认为没关系。你实际上并没有使用全局变量(例如,使用'global'关键字)。您正在导入模块,然后从其他模块访问该模块。对我来说似乎是一个很好的解决方案。

你走动了多少数据?因为您可以使用数据存储区,例如SQLite,并且每个模块都可以根据需要读取和写入数据存储区。但是,每分钟更新一次,您可能不需要持久性或关系,使您现有的解决方案更简单。

[稍后编辑]

想想看,内存中的SQLite数据库可能会在这里找到你的最佳点: http://www.sqlite.org/inmemorydb.html