この記事では、Python のスレッド同期プリミティブに関するコード例を紹介します。一定の参考値があります。必要な友人は参照できます。お役に立てれば幸いです。
Threading モジュールは、Python3 のマルチスレッド モジュールです。このモジュールには、Thread、Condition、Event、Lock、Rlock、Semaphore、Timer などの多くのクラスが統合されています。次の記事では、主にケースを使用してイベントとセグマフォ (境界セグマフォ) の使用法を説明します。
#Event
#Event クラスは、イベントが待機中かどうかをマークするための flags パラメータを内部的に格納します。 イベント クラス インスタンス関数1.set() フラグを True に設定すると、イベントのブロックが停止します2.clear() フラグを False にリセットし、フラグを削除します。イベントは再ブロックされます3. wait() はイベントを待機状態に設定します4.is_set() はフラグが設定されているかどうかを判断し、設定されている場合は True を返します。それ以外の場合は False を返します
(1) 単一のイベントは他のイベントの発生を待機します特定のコード:
from time import ctime,sleep event = Event() def event_wait(): print(ctime()) event.wait() print('这是event_wait方法中的时间',ctime()) def event_set(n): sleep(n) event.set() print('这是event_set方法中的时间', ctime()) thread1 = Thread(target=event_wait) thread2 = Thread(target=event_set,args=(3,)) thread1.start() thread2.start()
結果:
Sat Nov 17 10:01:05 2018 这是event_wait方法中的时间 Sat Nov 17 10:01:08 2018 这是event_set方法中的时间 Sat Nov 17 10:01:08 2018(2) 複数のイベントが次々と発生しました レースを例。 5 本の滑走路があり、それぞれに 1 人のアスリート ABCDE がいると仮定します。 特定のコード:
from threading import Event from threading import Thread import threading event = Event() def do_wait(athlete): racetrack = threading.current_thread().getName() print('%s准备就绪' % racetrack) event.wait() print('%s听到枪声,起跑!'%athlete) thread1 = Thread(target=do_wait,args=("A",)) thread2 = Thread(target=do_wait,args=("B",)) thread3 = Thread(target=do_wait,args=("C",)) thread4 = Thread(target=do_wait,args=("D",)) thread5 = Thread(target=do_wait,args=("E",)) threads = [] threads.append(thread1) threads.append(thread2) threads.append(thread3) threads.append(thread4) threads.append(thread5) for th in threads: th.start() event.set() #这个set()方法很关键,同时对5个线程中的event进行set操作結果:
Thread-1准备就绪 Thread-2准备就绪 Thread-3准备就绪 Thread-4准备就绪 Thread-5准备就绪 E听到枪声,起跑! A听到枪声,起跑! B听到枪声,起跑! D听到枪声,起跑! C听到枪声,起跑!Yes複数のスレッドでのイベントの set() はランダムであり、その内部実装は notify_all() メソッドによるものであることがわかります。このメソッドは、ロックされているすべてのイベントを一度に解放します。最初に実行されているスレッドのタイム スライスを取得したスレッドが最初にロックを解放します。 1 つの set() 関数を呼び出すだけですべてのイベントの終了をブロックできる理由は、event.wait() がスレッド内に実装され、set() 関数がプロセス内で呼び出されるためです。 -スレッドはプロセス メモリ空間を共有します。これら 2 つの関数が異なるプロセスで呼び出された場合、これは実現できません。
BoundedSegmaphore
ホストが IO 集中型のタスクを実行し、その後、短時間で多数のタスク (マルチスレッド) を完了するプログラムを実行すると、コンピュータはダウンしている可能性が高くなります。 現時点では、このプログラムにカウンター関数を追加して、ある時点のスレッド数を制限できます。 IO操作を行うたびにセグマフォにリソース(ロック)を要求する必要があり、要求されていない場合はブロックして待機し、要求が成功した場合のみタスクを実行するような感じになります。 BoundedSegmaphore と Segmaphore の違いBoundedSegmaphore によって要求されたロックの数は渡されたパラメーターに固定されますが、Segmaphore によって要求されたロックの数は渡されたパラメーターを超えることができます。 主な機能:1.acquire() ロックの要求2. release() ロックの解除以下は家を借りる例です。これを説明するために、ロックの数を固定するメカニズムを示します。小さなアパートに 6 部屋あり、当初は 2 人の住人が住んでいたとします。 具体的なコード実装:from threading import BoundedSemaphore,Lock,Thread from time import sleep from random import randrange lock = Lock() num = 6 hotel = BoundedSemaphore(num) def logout(): lock.acquire() print('I want to logout') print('A customer logout...') try: hotel.release() print('Welcome again') except ValueError: print('Sorry,wait a moment.') lock.release() def login(): lock.acquire() print('I want to login') print('A customer login...') if hotel.acquire(False): print('Ok,your room number is...') else: print('Sorry,our hotel is full') lock.release() #房东 def producer(loops): for i in range(loops): logout() print('还剩%s' % hotel._value, '房间') sleep(randrange(2)) #租客 def consumer(loops): for i in range(loops): login() print('还剩%s' % hotel._value, '房间') sleep(randrange(2)) def main(): print('Start') room_num = hotel._value print('The hotel is full with %s room'%room_num) #原本有2个住户 hotel.acquire() hotel.acquire() thread1 = Thread(target=producer,args=(randrange(2,8),)) thread2 = Thread(target=consumer,args=(randrange(2,8),)) thread1.start() thread2.start() if __name__ == '__main__': main()結果:
The hotel is full with 6 room I want to logout A customer logout... Welcome again 还剩5 房间 I want to logout A customer logout... Welcome again 还剩6 房间 I want to login A customer login... Ok,your room number is... 还剩5 房间 I want to login A customer login... Ok,your room number is... 还剩4 房间部屋の数 _value 値 (BoundedSegmaphore 内のカウンター) は受信パラメーター 6 でなければならないため、6 を超えることはありません。
以上がPython のスレッド同期プリミティブのコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの問題を解決する方法は?風光明媚なスポットコメントと分析を行っているとき、私たちはしばしばJieba Wordセグメンテーションツールを使用してテキストを処理します...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
