2016-02-29 30 views
0

我有一個小型web服務器在POST請求上執行一些操作。它讀取一個數據文件,進行一些檢查,然後重新保存文件,添加POST中的一些信息。並行訪問Python中的數據文件

我遇到的問題是,如果兩個客戶端幾乎在同一時間執行POST請求,兩者都將讀取同一個文件,然後一個會寫入包含新信息的文件,然後另一個客戶端將寫入文件包含其新信息,但沒有來自其他客戶端的信息,因爲該部分在讀取時不在文件中。

f = open("foo.txt", "r+") 
tests_data = yaml.safe_load(f) 
post_data = json.loads(web.data()) 
#Some checks 

f.write(json.dumps(tests_data)) 
f.close() 

我想腳本「等待」,不給了一個錯誤,在該文件已被相同的代碼的另一進程打開「打開」行,然後讀取文件時其他進程完成並關閉了文件。

或其他如果存在其他解決方案。

+0

也許有某種排隊系統,其中您的程序寫入當前訪問某些輔助數據文件的人員隊列,然後在分配的唯一ID位於文件前面時執行。讓程序清理它的實例ID。或者你想要這樣做。 – jh44tx

回答

3

標準鎖不符合您的需求嗎?該鎖需要處於模塊級別。

from threading import Lock 
# this needs to be module level variable 
lock = Lock 

with lock: 
    # do your stuff. only one thread at a time can 
    # work in this space...