私は、非同期のI/Oコールバックから定期的に更新されるPythonオブジェクトを持っています。いくつかのスレッドは、このオブジェクトが更新されるのを待つ必要があります。Pythonの待ちスレッドを一度起動する
この「更新」イベントは瞬間的なイベントであり、待機中のスレッドに目を覚ませるように指示するアクションは、アトミックなものでなければなりません。
私はいくつかの解決策を探しています:
- 条件オブジェクトがある、最初のロックを取得するためにあなたを必要とする無行く:私は
wait
妨害されずに到達するために複数のスレッドを必要とし、取得するために戦っなしロック。 - イベントオブジェクトは競合状態を生成します。イベントがクリアされる前にスレッドが
wait
に達すると、スレッドは待機せず、逆にイベントがクリアされてからスレッドが覚醒する可能性があります。
最善の解決策は、POSIX pause
/kill
コンボの相当するだろうが、スレッドのための(少なくとも私は考えることができる最高)。
ので、質問:
pause
/kill
コンボは、Python 2.7スレッドの同等の、そしてどちらを持っていますか?- もしそうでなければ、Python 2.7標準ライブラリを使用して、私のユースケースで最も信頼性の高い妥協点は何ですか?ここで
私が達成したいものと同様のものである:
# Would be a derived of threading.Event
# and the perfect solution for me, if it existed
ev = InstantEvent()
def update(*args):
# do stuff with args
ev.notifyAll()
if __name__ == "__main__":
# do startup stuff
ev.wait()
# do more stuff