2017-06-03 10 views
0

私は複数のスレッドで使用される関数を持っています。その性質上、この関数は一度に1回しか呼び出されません。同じ時刻に関数を呼び出す複数のスレッドが悪い可能性があります。一度に1つのスレッドでしか呼び出せないメソッド

スレッドによって関数が使用されている場合、他のスレッドはそのスレッドが解放されるのを待つ必要があります。

私の背景はコード化されていないのでわかりませんが、これは専門用語で「ロック」と呼ばれていると思いますか?私はグーグルでそれを試みましたが、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') 
関連する問題