我有一個應用程序,在給定的intervall循環通過項目列表(然後這個列表的長度變化)爲每個項目它做了一個相當簡單的操作,它不只是增加一個值,但不是這是一些非常複雜的計算。需要多少鎖和
什麼我不知道是我應該鎖定爲這樣的(目前的解決方案)的每個項目:
def method_1:
for item in the_list:
do_operation(item);
def do_operation(item):
lock()
//do some stuff.
unlock()
或者我應該做這樣的:
def method_1:
lock()
for item in the_list:
do_operation(item);
unlock()
def do_operation(item):
//do some stuff.
我想這其實是真的很難回答,因爲我認爲這很大程度上取決於「做一些事情」是什麼以及需要多長時間。我真的不知道這需要多少時間。特別是與蟒蛇獲得鎖定需要多長時間相比。
讓我知道在評論中是否可以改進我的問題。
有往往是開銷相對高量。因此,我傾向於爭取後一種選擇。特別是在這種情況下,沒有實質性的循環部分不會成爲關鍵部分的一部分。另一方面,如果'do_operation'在其他地方使用,並且應該始終受到保護,那麼在函數內部執行鎖定是有意義的。 – jpm
如果你不使用線程,那麼沒有,沒有必要。在你的代碼中注意你需要使用它。 –
許多鎖支持上下文管理器協議('帶鎖:做東西')。這對於異常情況很有幫助(另一種方法是'try:'/'finally:'子句)。 – glglgl