2017-06-03 76 views
0

我有一個多線程使用的函數。由於其性質,此功能應該只能一次調用一次。多個線程在同一時間調用該函數可能會很糟糕。一次只能由一個線程調用的方法

如果函數正在被線程使用,其他線程就不得不等待它自由。

我的背景不是編碼,所以我不確定,但我相信這在行話中被稱爲「鎖定」?我嘗試了谷歌搜索,但沒有找到一個Python3的簡單例子。

一個簡化的情況:

def critical_function(): 
    # How do I "lock" this function? 
    print('critical operation that should only be run once at a time') 

def threaded_function(): 
    while True: 
     # doing stuff and then 
     critical_function() 

for i in range(0, 10): 
    threading.Thread(target=threaded_function).start() 
+0

所以你要當第二個線程試圖調用該函數發生了什麼?它應該拋出一個錯誤?它是否應該等待第一個線程完成? –

+0

@Rawing - 我的問題的第一段的最後一行'如果函數正在被線程使用,其他線程就不得不等待它被釋放。'我將把它放在自己的路線上以使它更清晰。 – Juicy

+0

看到這個,http://effbot.org/zone/thread-synchronization.htm – Sush

回答

2
from threading import Lock 
critical_function_lock = Lock() 

def critical_function(): 
    with critical_function_lock: 
     # How do I "lock" this function? 
     print('critical operation that should only be run once at a time')