ホームページ  >  記事  >  バックエンド開発  >  Python スレッドでのイベントの使用方法の簡単な紹介

Python スレッドでのイベントの使用方法の簡単な紹介

不言
不言オリジナル
2018-09-11 16:09:141788ブラウズ

この記事では、Python スレッドでのイベントの使用方法を紹介します。一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。

イベントはスレッド間の通信に使用されます。 1 つのスレッドが [event] シグナルを送信し、1 つ以上の他のスレッドがそれを待ちます。

Event インスタンスは内部フラグを管理します。内部フラグは、set() メソッドを使用して True に設定するか、clear() メソッドを使用して False にリセットできます。 wait() メソッドは、フラグが True になるまでブロックされます。

構文:

e=Event()
创建新的Event实例,并将内部标志设置为False。

共通メソッド:

e.is_set():只有当内部标志设为True时才返回True

e.set():将内部标志设置为True。等待它变为True的所有线程都讲被唤醒。

e.clear():将内部标志重置为False。

e.wait(timeout):阻塞直到内部标志为True。如果调用时内部标志为True,此方法将立即返回。
否则,它将阻塞,直到另一个线程调用set()方法将标志设置为True,或者出现可选的超时时。

Note

Event オブジェクトは他のスレッドにシグナルを送信するために使用できますが、他のスレッドでの実装には使用しないでください。次のコードのようなプロデューサとコンシューマの通知:
evt=Event()

def producer():
    while True:
        #生产项
        ...
        evt.signal()
def consumer():
    while True:
        #等待一个项
        evt.wait()
        #消费项
        ...
        #清除事件并再次等待
        evt.clear()

上記のコードはできる限り避ける必要があります。このコードは信頼性が低いためです。evt.wait() と evt.clear() 操作の間で、プロデューサが新しいアイテムを生み出す可能性があります。ただし、明確なイベントの場合、プロデューサーが作成するまで消費者は新しいアイテムを表示できない場合があります。最良のシナリオは、プログラムが短い一時停止を経て、アイテムの処理が不可解なほど遅延することです。最悪のシナリオは、イベント信号の喪失によりプログラム全体がハングすることです。この種の問題を解決するには、条件変数を使用することをお勧めします。

関連する推奨事項:

Python マルチスレッド プログラミングの簡単な紹介

#Python マルチスレッド、ロックの詳細な説明、およびイベント イベント メカニズム 簡単な使用

#Python を使用して単純なスレッド プールを実装する

#

以上がPython スレッドでのイベントの使用方法の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

関連記事

続きを見る