Pythonで複数のスレッドを同期する
-
23-08-2019 - |
質問
必要な場所に問題があります x
スレッドはすべて同期ポイントに到達するまで待機します。私のソリューションでは、 synchronise
以下のメソッドは、同期が必要なときに各スレッド関数によって呼び出されます。
これを行うより良い方法はありますか?
thread_count = 0
semaphore = threading.Semaphore()
event = threading.Event()
def synchronise(count):
""" All calls to this method will block until the last (count) call is made """
with semaphore:
thread_count += 1
if thread_count == count:
event.set()
event.wait()
def threaded_function():
# Do something
# Block until 4 threads have reached this point
synchronise(4)
# Continue doing something else
解決
スレッドを同期するにはさまざまな方法があります。多くの。
同期に加えて、次のようなことを行うことができます。
同期ポイントを中心にタスクを 2 つのステップに分割します。事前同期ステップを実行するスレッドを開始します。次に、「join」を使用して、すべてのスレッドがステップ 1 を完了するまで待ちます。同期後のステップを実行する新しいスレッドを開始します。私は同期よりもこれを好みます。
キューを作成します。同期ロックを取得します。すべてのスレッドを開始します。各スレッドはキューにエントリを入れ、同期ロックを待ちます。「メイン」スレッドは、キューからアイテムをデキューするループ内に存在します。すべてのスレッドが項目をキューに入れると、「メイン」スレッドが同期ロックを解放します。他のすべてのスレッドは再び自由に実行できるようになります。
プロセス間通信 (IPC) 技術は多数あり、そのすべてをスレッド同期に使用できます。
他のヒント
所属していません StackOverflow