2012-08-02 61 views
3

我凌亂的解決方案:做一個變量訪問所有正在運行的程序

我是一個開始Python程序員和的,因爲我缺乏先進的知識,我經常用原始的工具來完成我的高級項目。目前我正試圖在運行時在程序之間交換數據。我曾嘗試編寫和閱讀文本文件。每個程序都有一個單獨的只寫文本文件,以避免兩個程序同時寫入文件。

爲了將所有數據收集到一個文件中,我編寫了一個單獨的程序來讀取只寫文本文件並將所有數據合併到一個文件中。所有程序都可以訪問這個文件中所有其他程序的變量。

我的一個簡單的解決方案要求:

即使上述方案運作良好,我試圖找到Python程序之間共享變量更優雅的方式。你能告訴我是否有更好的方法在Python中做到這一點?

非常感謝。

+6

你考慮過數據庫嗎? – geoffspear 2012-08-02 12:23:19

+0

但txt文件真的更好,如果變量只有一個:)或基於文件的數據庫 - sqlite,h2 – dmitry 2012-08-02 12:27:16

+4

爲什麼你會想要這個?如果一組程序在運行時都需要相同的信息並需要相互交談,爲什麼它們不是同一程序中的類/函數?也許如果你告訴我們爲什麼你需要這個功能,我們可以給出一個更合理的解決方案。 – mgilson 2012-08-02 12:29:11

回答

4

Memcached或多或少爲您所描述的設計,因爲變量與內存一樣易失。

Redis是另一個不錯的選擇,它與memcached有一些相似之處,但可以選擇使數據持久化。

我能想到的所有其他直接共享選項直接歸入數據庫(無論是否SQL)的類別,除了使用平面文件,這正是您現在正在執行的操作。

最後,您可以對程序進行重構,以便不直接共享值,而是相互提供服務,以便在需要時交換信息。在某些情況下,這可能會增加開銷和複雜性,但如果它們發生更改,則無需驗證變量值的緩存。

+0

謝謝我會發現更多關於這些模塊。 Redis似乎很酷,我認爲這會節省很多時間:) – 2012-08-02 12:35:20

2

您可以使用sockets在程序之間進行通信。但是,如果您共享的數據總是與所有程序相關,那麼正如其他人所建議的那樣,中央數據庫將更適合。

或者,如果所有程序都是用Python編寫的,則可以使用不同的threads上的相同解釋器啓動它們。線程共享相同的內存空間,以便在它們之間共享變量已經內置(只要確保以線程安全的方式讀取/寫入它們)。

相關問題