我正在開發帶有龍捲風的推送系統。當我正在進行長時間輪詢時,我需要保留一個Future Object的列表,以便稍後爲它們設置結果。然後我想在Redis中保留Future列表,所以我使用Pickle模塊「轉儲」每個Future,並將其設置爲Redis,但是在我從Redis得到它並「加載」它之後。我發現它不是最初的Future Object,當我在這個未來的對象上調用set_result函數時,它不能像我期望的那樣工作。Tornado未來對象轉儲到Redis並從Redis加載
任何人都可以幫助我呢?
這是我的代碼的一部分:
@singleton
class MessageProxy:
def register_subscriber(self, subscriber):
r.set("subscriber", pickle.dumps(subscriber))
def send_message(self, message):
subscriber = pickle.loads(r.get("subscriber"))
subscriber.set_result(message.content)
感謝Ben,我停止酸洗Future併爲每個實例(進程)製作'maps',但最後我發現一旦我請求將消息發送給所有這些消息,我仍然無法控制來自不同實例的所有Future。我認爲'分享未來'的解決方案並不適合我的推送系統。 – 2015-03-26 09:43:28
我知道Redis Pub/Sub可以使用,我發現了龍捲風的相關異步庫。所以現在我很好奇它如何在多進程環境下工作,它如何控制來自不同實例的IOLoop或Object? – 2015-03-26 09:46:35
您不「控制來自不同實例的IOLoop」。 pubsub背後的想法是,你發佈事件時不知道誰(如果有人)正在傾聽。一個節點在redis中留下消息;另一個節點(或多個節點)選取它們。 – 2015-03-26 12:26:54