この記事では、Python 分散プロセスとは何かを見てみましょう。 Python 分散プロセスと、Python プログラミングで分散プロセスが果たせる役割について学びます。
スレッドとプロセスのうち、プロセスはより安定しており、複数のマシンに分散できるのに対し、スレッドは最大でも同じマシン上の複数の CPU にしか分散できないため、プロセスを優先する必要があります。
Python のマルチプロセッシング モジュールは複数のプロセスをサポートするだけでなく、マネージャ サブモジュールは複数のプロセスを複数のマシンに分散することもサポートします。サービス プロセスはスケジューラとして機能し、ネットワーク通信に依存してタスクを他の複数のプロセスに分散できます。マネージャー モジュールは適切にカプセル化されているため、ネットワーク通信の詳細を知らなくても、分散マルチプロセス プログラムを簡単に作成できます。
例: 同じマシン上で Queue を介して通信するマルチプロセス プログラムがすでに実行されている場合、タスクを処理するプロセスのワークロードが重いため、送信するプロセスを分離したいと考えます。タスクとそのタスクを処理するプロセス。2 台のマシンに分散されます。分散プロセスを使用して実装するにはどうすればよいですか?
元のキューは引き続き使用できますが、マネージャー モジュールを通じてネットワーク経由でキューを公開すると、他のマシン上のプロセスがキューにアクセスできるようになります。
まずサービス プロセスを見てみましょう。サービス プロセスは、キューを開始し、ネットワーク上でキューを登録し、キューにタスクを書き込む責任があります:
# task_master.py import random, time, queue from multiprocessing.managers import BaseManager # 发送任务的队列: task_queue = queue.Queue() # 接收结果的队列: result_queue = queue.Queue() # 从BaseManager继承的QueueManager: class QueueManager(BaseManager): pass # 把两个Queue都注册到网络上, callable参数关联了Queue对象: QueueManager.register('get_task_queue', callable=lambda: task_queue) QueueManager.register('get_result_queue', callable=lambda: result_queue) # 绑定端口5000, 设置验证码'abc': manager = QueueManager(address=('', 5000), authkey=b'abc') # 启动Queue: manager.start() # 获得通过网络访问的Queue对象: task = manager.get_task_queue() result = manager.get_result_queue() # 放几个任务进去: for i in range(10): n = random.randint(0, 10000) print('Put task %d...' % n) task.put(n) # 从result队列读取结果: print('Try get results...') for i in range(10): r = result.get(timeout=10) print('Result: %s' % r) # 关闭: manager.shutdown()
マルチプロセス プログラムを作成する場合、作成されたキューは直接使用できますが、分散マルチプロセス環境では、タスクをキューに追加しても、元の task_queue を直接操作することはできません。 QueueManager を渡す必要があります。 manager.get_task_queue() で取得される Queue インターフェースが追加されます。
次に、別のマシンでタスク プロセスを開始します (このマシンでも開始できます):
# task_master.py import random, time, queue from multiprocessing.managers import BaseManager # 发送任务的队列: task_queue = queue.Queue() # 接收结果的队列: result_queue = queue.Queue() # 从BaseManager继承的QueueManager: class QueueManager(BaseManager): pass # 把两个Queue都注册到网络上, callable参数关联了Queue对象: QueueManager.register('get_task_queue', callable=lambda: task_queue) QueueManager.register('get_result_queue', callable=lambda: result_queue) # 绑定端口5000, 设置验证码'abc': manager = QueueManager(address=('', 5000), authkey=b'abc') # 启动Queue: manager.start() # 获得通过网络访问的Queue对象: task = manager.get_task_queue() result = manager.get_result_queue() # 放几个任务进去: for i in range(10): n = random.randint(0, 10000) print('Put task %d...' % n) task.put(n) # 从result队列读取结果: print('Try get results...') for i in range(10): r = result.get(timeout=10) print('Result: %s' % r) # 关闭: manager.shutdown()
タスク プロセスはネットワーク経由でサービス プロセスに接続する必要があるため、IPサービスプロセスのを指定する必要があります。
ここで、分散プロセスの効果を試すことができます。まず、task_master.py サービス プロセスを開始します。
$ python3 task_master.py Put task 3411... Put task 1605... Put task 1398... Put task 4729... Put task 5300... Put task 7471... Put task 68... Put task 4219... Put task 339... Put task 7866... Try get results...
task_master.py プロセスがタスクを送信した後、結果キューの結果の待機を開始します。ここで、task_worker.py プロセスを開始します。
$ python3 task_worker.pyConnect to server 127.0.0.1... run task 3411 * 3411... run task 1605 * 1605... run task 1398 * 1398... run task 4729 * 4729... run task 5300 * 5300... run task 7471 * 7471... run task 68 * 68... run task 4219 * 4219... run task 339 * 339... run task 7866 * 7866... worker exit.
task_worker.py プロセスが終了し、結果は引き続き task_master.py プロセスに出力されます。
Result: 3411 * 3411 = 11634921 Result: 1605 * 1605 = 2576025 Result: 1398 * 1398 = 1954404 Result: 4729 * 4729 = 22363441 Result: 5300 * 5300 = 28090000 Result: 7471 * 7471 = 55815841 Result: 68 * 68 = 4624 Result: 4219 * 4219 = 17799961 Result: 339 * 339 = 114921 Result: 7866 * 7866 = 61873956
この単純なコードは何に使用されますか?マスター/ワーカーモデル?実際、これはシンプルですが真の分散コンピューティングです。コードを少し変更して複数のワーカーを起動することで、タスクを数台または数十台のマシンに分散できます。たとえば、n*n を計算するコードは、メールキューの非同期送信を実現します。
ネットワーク経由で Queue にアクセスできるのは、QueueManager を介しているためです。 QueueManager は複数の Queue を管理するため、各 Queue のネットワーク呼び出しインターフェイスに get_task_queue などの名前を付ける必要があります。
authkey の用途は何ですか?これは、2 つのマシンが正常に通信し、他のマシンによる悪意のある干渉を受けないようにするためです。 task_worker.py の authkey が task_master.py の authkey と一致しない場合、接続は確実に失敗します。
Python の分散プロセス インターフェイスはシンプルで適切にカプセル化されているため、重いタスクを複数のマシンに分散する必要がある環境に適しています。
Queue の役割はタスクを配信し、結果を受け取ることであることに注意してください。各タスクを記述するデータの量はできるだけ少なくする必要があります。たとえば、ログ ファイルを処理するタスクを送信する場合、サイズが数百メガバイトのログ ファイル自体を送信するのではなく、ログ ファイルが保存されている完全なパスを送信すると、ワーカー プロセスはファイルを次の場所から読み取ります。共有ディスク。
以上がこの記事の内容です、この記事では主にpython分散プロセスの関連知識を紹介しますので、上記の内容を理解するために活用していただければ幸いです。この記事で説明したことがあなたのお役に立ち、Python の学習が容易になることを願っています。
関連知識の詳細については、php 中国語 Web サイトの Python チュートリアル 列を参照してください。
以上がPythonの分散プロセスとは何ですか? (分析例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック



