検索
ホームページバックエンド開発PHPチュートリアルPythonのマルチプロセッシング・マルチプロセス通信のためのパイプとキューの紹介_PHPチュートリアル

Pythonのマルチプロセッシングマルチプロセス通信のためのパイプとキューの紹介

PythonのマルチプロセッシングはIPC(パイプとキュー)を提供し、Pythonのマルチプロセスを並行してより効率的にします。今回はパイプとキューについて詳しく紹介していきます。

過去 2 日間で、Python のマルチプロセッシング モジュールをレビューしました。パイプとキューの 2 つの IPC メソッドについて説明しました。 ipc はプロセス間通信モードで、一般的に使用されるものの半分はソケット、rpc、パイプ、メッセージ キューです。


今日はまたパイプとキューをいじってみます。

コードは次のとおりです
#coding:utf-8
マルチプロセッシングをインポートします
輸入時間

def proc1(パイプ):
True の間:
xrange(10000) の私:
print "%s を送信"%i
パイプ.send(i)
時間.睡眠(1)

def proc2(パイプ):
True の間:
print 'proc2 は次を受け取ります:',pipe.recv()
時間.睡眠(1)

def proc3(パイプ):
True の間:
print 'proc3 は次を受け取ります:',pipe.recv()
時間.睡眠(1)
#パイプを作る
パイプ = multiprocessing.Pipe()
プリントパイプ

# パイプの終端を処理1に渡します
p1 = multiprocessing.Process(target=proc1, args=(pipe[0],))
# パイプのもう一方の端をプロセス 2 に渡します
p2 = multiprocessing.Process(target=proc2, args=(pipe[1],))


p1.start()
p2.start()
p1.join()
p2.join()

python的multiprocessing多进程通信的pipe和queue介绍   帮客之家


マルチプロセッシング パイプだけでなく、他のパイプ実装も、私があなたに渡してあなたがそれを受け取るか、あなたが来て私がそれを受け取るかのような 2 つのプロセス間の単なるゲームです。 もちろん二重状態にすることも可能です。

キューの場合、より多くのプロセスが参加できます。使用法は他のキューと同様です。


公式 Web サイトのドキュメントをご覧ください:

multiprocessing.Pipe([duplex])

パイプの端を表す Connection オブジェクトのペア (conn1、conn2) を返します。

#2 つのパイプ オブジェクト。これら 2 つのオブジェクトを使用して相互に通信します。


duplex が True (デフォルト) の場合、パイプは双方向です。 duplex が False の場合、パイプは単方向です。conn1 はメッセージの受信にのみ使用でき、conn2 はメッセージの送信にのみ使用できます。

クラス multiprocessing.Queue([maxsize])

パイプといくつかのロック/セマフォを使用して実装されたプロセス共有キューを返します。プロセスが最初にアイテムをキューに置くと、オブジェクトをバッファからパイプに転送するフィーダー スレッドが開始されます。
#キューの最大数


標準ライブラリの Queue モジュールからの通常の Queue.Empty 例外と Queue.Full 例外は、タイムアウトを通知するために発生します。


Queue は、task_done() と join() を除く、Queue.Queue のすべてのメソッドを実装します。

qsize()

マルチスレッド/マルチプロセッシングのセマンティクスのため、キューのおおよそのサイズを返します。

#キューサイズ


sem_getvalue() が実装されていない Mac OS X などの Unix プラットフォームでは、これにより NotImplementedError が発生する可能性があることに注意してください。

空()

キューが空の場合は True を返し、そうでない場合は False を返します。マルチスレッド/マルチプロセスのセマンティクスのため、これは信頼できません。

#穴が開いているかどうか。 空の場合は、True ステータスを返します。


いっぱい()

キューがいっぱいの場合は True を返し、そうでない場合は False を返します。マルチスレッド/マルチ処理のセマンティクスのため、これは信頼できません。

#キューのステータスがフルかどうか。


put(obj[, block[, timeout]])

obj をキューに入れます。オプションの引数 block が True (デフォルト) で、timeout が None (デフォルト) の場合、空きスロットが使用可能になるまで必要に応じてブロックされます。 timeout が正の数の場合は、最長 timeout 秒でブロックされます。その時間内に空きスロットがなかった場合は Queue.Full 例外が発生します。それ以外の場合 (ブロックが False)、空きスロットがすぐに利用できる場合は項目をキューに置き、それ以外の場合は Queue.Full 例外を発生させます (タイムアウトは無視されます)。場合)。

#それをキューに入れると、タイムアウトを追加できます。

put_nowait(obj)

put(obj, False) と同等です。

#ここは渋滞なし


get([ブロック[, タイムアウト]])

キューから項目を削除して返します。オプションの args block が True (デフォルト) で、timeout が None (デフォルト) の場合、項目が使用可能になるまで必要に応じてブロックされます。 timeout が正の数値の場合、最大タイムアウト秒数でブロックされます。それ以外の場合 (ブロックが False)、すぐに使用可能な項目がある場合は項目を返し、それ以外の場合は Queue.Empty 例外を発生させます (その場合、タイムアウトは無視されます)。
#getstatus


get_nowait()

get(False) と同等です。

#ブロックせずにキュー内のデータを取得します


Queue には、Queue.Queue にはない追加のメソッドがいくつかあります。これらのメソッドは、通常、ほとんどのコードには不要です。

閉じる()

現在のプロセスによってこれ以上データがこのキューに置かれないことを示します。これは、キューがガベージ コレクションされるときに自動的に呼び出されます。
#閉じて、現在のプロセスのリソースを保存します。



マルチプロセッシングキューの長さを 3 に設定しました。次に、4 番目のキューを配置すると、誰かがデータを取得して 1 つを削除するのを待っていることがわかります。その時点で、キューはブロックされ続ける可能性があります。 。 入力。 put_nowait() を使用すると、キューが制限を超えるとすぐにエラーが発生します。


/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/queues.pyc in put_nowait(self, obj)


/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/queues.pyc in put(self, obj, block, ti​​meout)

Pythonのマルチプロセッシング・マルチプロセス通信のためのパイプとキューの紹介_PHPチュートリアル


以下はテスト コードの一部です。学生はデモを実行してその感触を得ることができます。

コードは次のとおりです
#coding:utf-8
OSをインポート
マルチプロセッシングをインポートします
輸入時間
# ワーカーに手紙を書きます
def inputQ(キュー):
True の間:
info = "プロセス ID %s: 時刻: %s"%(os.getpid(),int(time.time()))
queue.put(情報)
時間.睡眠(1)
#ワーカーをゲット
def OutputQ(キュー,ロック):
True の間:
info = queue.get()
#lock.acquire()
print (str(os.getpid()) + '(get):' + info)
#lock.release()
時間.睡眠(1)
#====================
#メイン
Record1 = [] # 入力プロセスを保存します
Record2 = [] # 出力プロセスを保存します
lock = multiprocessing.Lock() # 印刷が汚くなるのを防ぐため
キュー = multiprocessing.Queue(3)

# 入力プロセス
範囲内 (10) の場合:
process = multiprocessing.Process(target=inputQ,args=(queue,))
process.start()
Record1.append(処理)

#出力プロセス
範囲内 (10) の場合:
process = multiprocessing.Process(target=outputQ,args=(queue,lock))
process.start()
Record2.append(処理)

Pythonのマルチプロセッシング・マルチプロセス通信のためのパイプとキューの紹介_PHPチュートリアル

さて、パイプとキューの使用法について簡単に説明しましょう。 実は、当初は Python パイプについて話したかったのですが、Google で検索したところ、マルチプロセッシング パイプが見つかりました。パイプを書いた後、記事の内容が少なすぎると感じたので、追加のキューを追加しました。 。 。

www.bkjia.com本当http://www.bkjia.com/PHPjc/968077.html技術記事 Pythonのマルチプロセッシングのマルチプロセス通信のパイプとキューの紹介 PythonのマルチプロセッシングはIPC(Pipe and Queue)を提供し、Pythonのマルチプロセスを並行して効率化します。この記事で詳しく説明しましょう...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?Apr 23, 2025 am 12:16 AM

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?Apr 23, 2025 am 12:13 AM

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

session.gc_maxlifetime構成設定とは何ですか?session.gc_maxlifetime構成設定とは何ですか?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

mPDF

mPDF

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