我讀過很多文章,說全局變量不好,但我需要它們!如何在Python中共享數據(每分鐘更新一次)accoss模塊?
我的情況:
我有一個專門的模塊,它是每分鐘更新一次,並在應用中的其它模塊用來定義幾個變量。 (在閱讀this後執行),您認爲它是一種好方法還是需要改進或更好的想法?
感謝
我讀過很多文章,說全局變量不好,但我需要它們!如何在Python中共享數據(每分鐘更新一次)accoss模塊?
我的情況:
我有一個專門的模塊,它是每分鐘更新一次,並在應用中的其它模塊用來定義幾個變量。 (在閱讀this後執行),您認爲它是一種好方法還是需要改進或更好的想法?
感謝
這聽起來像一個好去處pub/sub technique,那就是你有對象監視更改。這在像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
的想法是,價值的「觀察家」註冊一個回調,它被調用時該值的變化。
我認爲這很好。你實際上並沒有使用全局變量(比如使用'global'關鍵字)。您正在導入模塊,然後從其他模塊訪問該模塊。對我來說似乎是一個很好的解決方案。
你移動了多少數據?因爲您可以使用數據存儲,比如SQLite,並且每個模塊都可以根據需要讀取和寫入數據存儲。但每分鐘更新一次,您可能不需要堅持或關係,使您的現有解決方案變得更簡單。
[編輯晚得多]
試想想起來了,在內存中的SQLite數據庫可能會打你的甜蜜點這裏: http://www.sqlite.org/inmemorydb.html
我用的pub/sub技術併爲我最終使用Redis pub/sub(http://redis.io/topics/pubsub)中介。 – Vishal 2011-08-23 23:35:17