2010-02-19 80 views
1

我有一個Django應用程序,它產生一個線程與另一個服務器通信,使用Pyro。Django與fastcgi和線程

不幸的是,它看起來像在fastcgi下,這個線程的多個版本被解僱了,在我的程序中應該是全局常量的字典不是。 (有時它具有我期望的值,有時不會)

確保在django/fastcgi應用程序中只有一個字典副本的最佳方法是什麼?

回答

4

我強烈建議不要依賴全球任何東西在django。問題在於,就像您遇到的情況一樣,部署的類型將決定如何(或是否)共享此全局狀態。爲了成爲一種納粹風格,這與代碼的抽象程度完全不同,它依賴於一致的全局狀態的一些保證。

我對fastcgi沒有經驗,但我的理解是,它像許多其他框架一樣,具有預分叉和線程模式。在pre-forked模式下,你有單獨的進程,而不是線程,運行你的python代碼。這給共享的全球狀態帶來了噩夢。

除了一些脆弱的解決方法,哪些應該是可能的,哪些人可能會或可能不會建議,您真正可以依賴的唯一持久性是在數據庫中,並且在較小的範圍內,無論您選擇什麼caching mechanism。您可以使用low-level api來緩存和檢索密鑰和值。