簡體   English   中英

如何讓多個python程序將行追加到同一個文件中?

[英]How to have multiple python programs append rows to the same file?

我有多個python進程(通常每個核心1個)轉換大量數據,每個數據都從專用源讀取,並寫入每個以追加模式打開的輸出文件。

這是這些程序的安全工作方式嗎?

由於性能要求嚴格且數據量大,我認為我不能讓每個進程重復打開和關閉文件。 另一個選擇是讓每個寫入一個專用的輸出文件,一個進程一旦完成就將它們連接在一起。 但我寧願避免這種情況。

提前感謝任何和所有的答案和建議。

您是否考慮過使用多處理模塊以類似線程的方式在正在運行的程序之間進行協調? 特別參見隊列接口; 您可以在完成后將每個已完成的工作項放在隊列中,並讓一個進程讀取隊列並寫入輸出文件。

或者,您可以讓每個子進程維護一個單獨的管道到父進程,該進程從所有進程執行select()調用,並在適當時將數據復制到輸出文件。 當然,這可以“手動”(沒有多處理模塊)以及它來完成。

或者,如果您避免線程的原因是為了避免全局解釋器鎖定,您可能會考慮非CPython實現(例如Jython或IronPython)。

你的程序是“安全的”,在沒有崩潰將導致,但數據來自不同進程的未來(非常不吉利的時間) 可以得到混合-例如,過程1附加一串長長的a S,處理2的長字符串b ,你可以有很多的文件,在結束了a當時的的b當時的多a S(或其他組合/混合工序)。

問題是,對於足夠長的字符串參數, .write不保證是原子的。 如果你在參數上有一個緊密的邊界,比你的fs / os的塊大,你可能會很幸運。 否則,請嘗試使用logging模塊,它確實需要采取更多預防措施(但這些預防措施可能會減慢您的速度......您需要進行基准測試),因為它針對的是多個程序經常附加的“日志文件”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM