この記事では主に、future を通じて同時実行の問題を処理するための Python を紹介します。これは非常に優れており、必要な友人は参考にしてください。 futureの予備理解:
例1: 通常のループメソッド
import os import time import sys import requests POP20_CC = ( "CN IN US ID BR PK NG BD RU JP MX PH VN ET EG DE IR TR CD FR" ).split() BASE_URL = 'http://flupy.org/data/flags' DEST_DIR = 'downloads/' def save_flag(img,filename): path = os.path.join(DEST_DIR,filename) with open(path,'wb') as fp: fp.write(img) def get_flag(cc): url = "{}/{cc}/{cc}.gif".format(BASE_URL,cc=cc.lower()) resp = requests.get(url) return resp.content def show(text): print(text,end=" ") sys.stdout.flush() def download_many(cc_list): for cc in sorted(cc_list): image = get_flag(cc) show(cc) save_flag(image,cc.lower()+".gif") return len(cc_list) def main(download_many): t0 = time.time() count = download_many(POP20_CC) elapsed = time.time()-t0 msg = "\n{} flags downloaded in {:.2f}s" print(msg.format(count,elapsed)) if __name__ == '__main__': main(download_many)
例2: futureメソッドで実装、ここでは上記のコードの一部を再利用します
from concurrent import futures from flags import save_flag, get_flag, show, main MAX_WORKERS = 20 def download_one(cc): image = get_flag(cc) show(cc) save_flag(image, cc.lower()+".gif") return cc def download_many(cc_list): workers = min(MAX_WORKERS,len(cc_list)) with futures.ThreadPoolExecutor(workers) as executor: res = executor.map(download_one, sorted(cc_list)) return len(list(res)) if __name__ == '__main__': main(download_many)
それぞれ3回実行し、両方の平均速度: 13.67 秒と 1.59 秒、その差は依然として非常に大きいことがわかります。
future
future は、concurrent.futures モジュールと asyncio モジュールの重要なコンポーネントです
python3.4 以降、標準ライブラリには Future という名前のクラスが 2 つあります: concurrent.futures.Future Futureこれら 2 つのクラスは同じ目的を果たします。両方の Future クラスのインスタンスは、完了する場合と完了しない場合がある遅延計算を表します。 Twisted の Deferred クラスと Tornado フレームワークの Future クラスに似ています 注: 通常、Future は自分で作成するべきではなく、並行フレームワーク (concurrent.futures または asyncio) によってインスタンス化されるべきです
理由: Future は終わりを表します。何かが起こるかどうかを判断する唯一の方法は、実行時間がスケジュールされているため、 concurrent.futures.Future インスタンスは、何かが concurrent.futures.Executor サブクラスに渡されたときにのみ作成されます。
future
クライアント コードは将来の状態を変更できません。同時実行フレームワークは、future によって表される遅延計算が終了した後に future オブジェクトの状態を変更します。計算がいつ終了するかを制御することはできません。
asyncio.Future.result メソッドはタイムアウトの設定をサポートしていません。将来の結果を取得するには、構造体からのyieldを使用するのが最善ですが、concurrent.futures.Future ではこれができません
asyncio であっても concurrent.futures であっても。 .Future では、いくつかの関数が future を返し、他の関数は future を使用します。最初の例では、戻り値はイテレータの __next__ メソッドで呼び出されます。 Future.as_completed 関数の使用に関して、ここでは 2 つのループを使用します。1 つは将来の作成とスケジュールに使用され、もう 1 つは結果
from concurrent import futures from flags import save_flag, get_flag, show, main MAX_WORKERS = 20 def download_one(cc): image = get_flag(cc) show(cc) save_flag(image, cc.lower()+".gif") return cc def download_many(cc_list): cc_list = cc_list[:5] with futures.ThreadPoolExecutor(max_workers=3) as executor: to_do = [] for cc in sorted(cc_list): future = executor.submit(download_one,cc) to_do.append(future) msg = "Secheduled for {}:{}" print(msg.format(cc,future)) results = [] for future in futures.as_completed(to_do): res = future.result() msg = "{}result:{!r}" print(msg.format(future,res)) results.append(res) return len(results) if __name__ == '__main__': main(download_many)
結果は次のとおりです:
concurrent.futures ProcessPoolExecutorクラスは作業を複数のPythonプロセスに分散するため、CPUを集中的に使用する処理を行う必要がある場合は、このモジュールを使用してGILをバイパスし、すべてのCPUコア。
その原理は、ProcessPoolExecutor が N 個の独立した Python インタープリターを作成することです。ここで、N はシステムで利用可能な CPU コアの数です。
使用方法はThreadPoolExecutorメソッドと同じです
以上がPython がフューチャーを通じて同時実行の問題を処理する方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

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 ...


ホット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 など) をサポートします。

WebStorm Mac版
便利なJavaScript開発ツール

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

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
