我正在Python中創建一個應用程序(應用程序A),它監聽端口,接收NetFlow記錄,封裝它們並將它們安全地發送到另一個應用程序(應用程序B)。應用程序A還會檢查記錄是否已成功發送。如果不是,則必須保存。應用程序A等待幾秒鐘,然後嘗試再次發送等。這是重要的部分。如果發送失敗,則必須存儲記錄,但同時還有更多記錄可以到達並且它們也需要存儲。理想的做法是排隊。不過,我需要這個隊列在文件中(在磁盤上)。例如,我發現這個代碼爲http://code.activestate.com/recipes/576642/,但它「在打開時將完整的文件加載到內存中」,這正是我想要避免的。我必須假設這個帶有記錄的文件將具有多個GB。Python:基於文件的線程安全隊列
所以我的問題是,你會推薦什麼來存儲這些記錄?它需要處理大量數據,另一方面,如果速度不是太慢,它會很好,因爲在正常活動期間,一次只保存一條記錄,並且立即讀取並刪除。所以基本狀態是一個空隊列。它應該是線程安全的。
我應該使用數據庫(dbm,sqlite3 ..)或類似pickle,shelve或其他東西嗎?
我有點在這方面的消費......謝謝。
謝謝您的意見,並對已故的答案感到抱歉。我在看你提出的解決方案,但我終於意識到我想要更標準的東西。我的意思是最好使用Python標準模塊,因爲應用程序的可移植性。我結束了使用sqlite,我對此非常滿意。我只需設置一些PRAGMA設置(例如同步到OFF或journal_mode爲OFF)來提高數據庫性能。 – samuelg0rd0n 2012-04-10 09:23:08