目次
1. 非同期タスクとは
2. タスクの作成方法
2.1. 高度な API
2.2. 低レベル API
3. タスクはいつ実行されますか?
ホームページ バックエンド開発 Python チュートリアル Python で非同期タスクを作成して実行する方法

Python で非同期タスクを作成して実行する方法

May 13, 2023 pm 01:31 PM
python

    1. 非同期タスクとは

    非同期タスクは、asyncio コルーチンを独立してスケジュールして実行するオブジェクトです。これは、asyncio プログラムがクエリを実行してコルーチンと対話するために使用できる、ディスパッチされたコルーチンへのハンドルを提供します。

    タスクはコルーチンから作成されます。コルーチン オブジェクトを取得し、コルーチンをラップし、実行のスケジュールを設定し、コルーチンと対話するメソッドを提供します。タスクは独立して実行されます。これは、asyncio イベント ループでスケジュールされ、それを作成したコルーチンで何が起こったかに関係なく実行されることを意味します。これは、呼び出し元が完了するまで待つ必要があるコルーチンを直接実行する場合とは異なります。

    asyncio.Task クラスは asyncio.Future クラスを拡張し、インスタンスは待機可能です。 Future は、最終的に到着する結果を表す下位クラスです。 Future クラスを拡張したクラスは、多くの場合、Future クラスと呼ばれます。

    非同期タスクは待機可能であるため、コルーチンは await 式を使用してタスクの完了を待機できることを意味します。

    ...
    # wait for a task to be done
    await task
    ログイン後にコピー

    asyncio タスクとは何かがわかったので、作成方法を見てみましょう。

    2. タスクの作成方法

    提供されたコルーチン インスタンスを使用してタスクを作成します。コルーチンは async def 式を使用して定義され、関数のように見えることを思い出してください。

    # define a coroutine
    async def task_coroutine():
    	# ...
    ログイン後にコピー

    タスクはコルーチンでのみ作成およびスケジュールできます。タスクを作成してスケジュールするには、主に次の 2 つの方法があります。

    • 高レベル API を使用してタスクを作成する (推奨)

    • タスクを作成する低レベル API の使用

    2.1. 高度な API

    asyncio.create_task() 関数を使用してタスクを作成できます。 asyncio.create_task() 関数は、コルーチン インスタンスとオプションのタスク名を受け入れ、asyncio.Task インスタンスを返します。

    ...
    # create a coroutine
    coro = task_coroutine()
    # create a task from a coroutine
    task = asyncio.create_task(coro)
    ログイン後にコピー

    これは、単一行で複合ステートメントを使用することで実現できます。

    ...
    # create a task from a coroutine
    task = asyncio.create_task(task_coroutine())
    ログイン後にコピー

    これにより、いくつかのことが行われます:

    • コルーチンを非同期タスク インスタンスにラップします。

    • 現在のイベント ループで実行されるタスクをスケジュールします。

    • タスク インスタンスを返す

    タスク インスタンスは破棄したり、メソッドを通じて操作したり、コルーチンによって待機したりできます。これは、asyncio プログラムでコルーチンからタスクを作成する場合に推奨される方法です。

    2.2. 低レベル API

    低レベルの asyncio API を使用して、コルーチンからタスクを作成することもできます。

    最初の方法は、asyncio.ensure_future() 関数を使用することです。この関数は、タスク、将来、またはコルーチンなどの将来に似たオブジェクトを受け取り、オプションでそれをスケジュールするためのループを受け取ります。ループが指定されていない場合は、現在のイベント ループでスケジュールされます。

    この関数にコルーチンが提供されている場合、それはインスタンスにラップされて返されます。

    ...
    # create and schedule the task
    task = asyncio.ensure_future(task_coroutine())
    ログイン後にコピー

    タスクの作成とスケジュールに使用できるもう 1 つの低レベル関数は、loop.create_task() メソッドです。この関数には、コルーチンがタスクとして実行される特定のイベント ループへのアクセスが必要です。

    asyncio.get_event_loop() 関数を通じて、asyncio プログラム内の現在のイベント ループのインスタンスを取得できます。これを使用して create_task() メソッドを呼び出し、Task インスタンスを作成し、実行をスケジュールできます。

    ...
    # get the current event loop
    loop = asyncio.get_event_loop()
    # create and schedule the task
    task = loop.create_task(task_coroutine())
    ログイン後にコピー

    3. タスクはいつ実行されますか?

    タスクを作成した後のよくある質問は、いつ実行されるのかということです。

    create_task() 関数を使用してコルーチンをタスクとして独立して実行するようにスケジュールできますが、すぐには実行されない場合があります。実際、イベント ループが実行されるまでタスクは実行されません。

    他のすべてのコルーチンが実行されなくなり、タスクが実行される番になるまで、これは発生しません。

    たとえば、タスクを作成してスケジュールするコルーチンを含む asyncio プログラムがある場合、スケジュールされたタスクは、タスクを作成した呼び出しコルーチンが一時停止されるまで実行されません。

    これは、呼び出し側コルーチンがスリープすることを選択した場合、別のコルーチンまたはタスクを待機することを選択した場合、またはスケジュールされた新しいタスクを待機することを選択した場合に発生する可能性があります。

    ...
    # create a task from a coroutine
    task = asyncio.create_task(task_coroutine())
    # await the task, allowing it to run
    await task
    ログイン後にコピー

    これで、タスクとは何か、そしてそれらをスケジュールする方法がわかりました。

    以上がPython で非同期タスクを作成して実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

    ホット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衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

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

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

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

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    XMLをPDFに変換できるモバイルアプリはありますか? XMLをPDFに変換できるモバイルアプリはありますか? Apr 02, 2025 pm 08:54 PM

    XMLをPDFに直接変換するアプリケーションは、2つの根本的に異なる形式であるため、見つかりません。 XMLはデータの保存に使用され、PDFはドキュメントを表示するために使用されます。変換を完了するには、PythonやReportLabなどのプログラミング言語とライブラリを使用して、XMLデータを解析してPDFドキュメントを生成できます。

    XML形式を開く方法 XML形式を開く方法 Apr 02, 2025 pm 09:00 PM

    ほとんどのテキストエディターを使用して、XMLファイルを開きます。より直感的なツリーディスプレイが必要な場合は、酸素XMLエディターやXMLSPYなどのXMLエディターを使用できます。プログラムでXMLデータを処理する場合、プログラミング言語(Pythonなど)やXMLライブラリ(XML.ETREE.ELEMENTTREEなど)を使用して解析する必要があります。

    推奨されるXMLフォーマットツール 推奨されるXMLフォーマットツール Apr 02, 2025 pm 09:03 PM

    XMLフォーマットツールは、読みやすさと理解を向上させるために、ルールに従ってコードを入力できます。ツールを選択するときは、カスタマイズ機能、特別な状況の処理、パフォーマンス、使いやすさに注意してください。一般的に使用されるツールタイプには、オンラインツール、IDEプラグイン、コマンドラインツールが含まれます。

    携帯電話用の無料のXMLからPDFツールはありますか? 携帯電話用の無料のXMLからPDFツールはありますか? Apr 02, 2025 pm 09:12 PM

    モバイルには、単純で直接無料のXMLからPDFツールはありません。必要なデータ視覚化プロセスには、複雑なデータの理解とレンダリングが含まれ、市場のいわゆる「無料」ツールのほとんどは経験がありません。コンピューター側のツールを使用したり、クラウドサービスを使用したり、アプリを開発してより信頼性の高い変換効果を取得することをお勧めします。

    XMLのコメントコンテンツを変更する方法 XMLのコメントコンテンツを変更する方法 Apr 02, 2025 pm 06:15 PM

    小さなXMLファイルの場合、注釈コンテンツをテキストエディターに直接置き換えることができます。大きなファイルの場合、XMLパーサーを使用してそれを変更して、効率と精度を確保することをお勧めします。 XMLコメントを削除するときは注意してください。コメントを維持すると、通常、コードの理解とメンテナンスが役立ちます。高度なヒントは、XMLパーサーを使用してコメントを変更するためのPythonサンプルコードを提供しますが、特定の実装を使用するXMLライブラリに従って調整する必要があります。 XMLファイルを変更する際のエンコード問題に注意してください。 UTF-8エンコードを使用して、エンコード形式を指定することをお勧めします。

    XMLの変更にはプログラミングが必要ですか? XMLの変更にはプログラミングが必要ですか? Apr 02, 2025 pm 06:51 PM

    XMLコンテンツを変更するには、ターゲットノードの正確な検出が必要であるため、プログラミングが必要です。プログラミング言語には、XMLを処理するための対応するライブラリがあり、APIを提供して、データベースの運用などの安全で効率的で制御可能な操作を実行します。

    携帯電話でXMLをPDFに変換するとき、変換速度は高速ですか? 携帯電話でXMLをPDFに変換するとき、変換速度は高速ですか? Apr 02, 2025 pm 10:09 PM

    Mobile XMLからPDFへの速度は、次の要因に依存します。XML構造の複雑さです。モバイルハードウェア構成変換方法(ライブラリ、アルゴリズム)コードの品質最適化方法(効率的なライブラリ、アルゴリズムの最適化、キャッシュデータ、およびマルチスレッドの利用)。全体として、絶対的な答えはなく、特定の状況に従って最適化する必要があります。

    画像に変換されたXMLのサイズを制御する方法は? 画像に変換されたXMLのサイズを制御する方法は? Apr 02, 2025 pm 07:24 PM

    XMLを介して画像を生成するには、XMLのメタデータ(サイズ、色)に基づいて画像を生成するために、ブリッジとしてグラフライブラリ(枕やJFreechartなど)を使用する必要があります。画像のサイズを制御するための鍵は、< width>の値を調整することです。および< height> XMLのタグ。ただし、実際のアプリケーションでは、XML構造の複雑さ、グラフ描画の細かさ、画像生成の速度とメモリ消費の速度、および画像形式の選択はすべて、生成された画像サイズに影響を与えます。したがって、グラフィックライブラリに熟練したXML構造を深く理解し、最適化アルゴリズムや画像形式の選択などの要因を考慮する必要があります。

    See all articles