ホームページ  >  記事  >  バックエンド開発  >  Python で 2 つの非同期関数を永久に実行する方法

Python で 2 つの非同期関数を永久に実行する方法

WBOY
WBOY転載
2023-09-21 21:25:021255ブラウズ

Python で 2 つの非同期関数を永久に実行する方法

コルーチンとも呼ばれる非同期関数は、実行中に一時停止したり再開したりできる関数です。 Python では、asyncio モジュールは、一時停止および再開できる特別な関数であるコルーチンを使用して同時コードを作成するための強力なフレームワークを提供します。この記事では、asyncio を使用して Python で 2 つの非同期関数を永久に実行する方法を検討します。

非同期関数

非同期関数はコルーチンとも呼ばれ、実行中に一時停止したり再開したりできる関数です。メインスレッドをブロックすることなくコードを同時実行できるため、システム リソースを効率的に使用できます。

Python で非同期関数を定義するには、def ステートメントの前に async キーワードを使用します。非同期関数では、await キーワードを使用して実行を一時停止し、別の非同期関数またはコルーチンが完了するのを待つことができます。

方法 1 - asyncio モジュールを使用する

Python の asyncio モジュールは、コルーチンを使用したシングルスレッドの同時コードの作成、ソケットやその他のリソースを介した I/O アクセスの多重化、ネットワーク クライアントとサーバーの実行、およびその他の関連操作のためのフレームワークを提供します。これにより、構造化され組織化された方法で非同期コードを作成できるようになります。 ###文法### リーリー ###例###

以下の function1 の例では、「Function 1」を出力し、await asyncio.sleep(1) を使用して 1 秒間一時停止する無限ループがあります。同様に、function2 には、「Function 2」を出力して 2 秒間停止する無限ループがあります。 main 関数で asyncio.gather(function1(), function2()) を呼び出すことで、両方の関数を同時に実行するようにイベント ループに指示します。 asyncio.gather 関数は、これら 2 つの関数をインターリーブ方式でスケジュールおよび実行する役割を果たします。 Python スクリプトを実行すると、イベント ループが無限に実行され、function1 と function2 が繰り返し実行されます。出力はこの動作を示しており、両方の関数からのメッセージがそれぞれの時間間隔に基づいて交互に出力されます。

rree ###出力### リーリー

方法 1 - スレッドを使用する

スレッドは軽量であり、複数のタスクを 1 つのプロセスで同時に実行できます。この方法では、スレッド モジュールを利用して 2 つの非同期関数を永久に実行します。

###文法### リーリー ###例###

以下の例には、async_function1 と async_function2 という 2 つの非同期関数があります。

async_function1 time.sleep(1) を使用して、「非同期関数 1」を毎秒出力します。

async_function2 は、time.sleep(2) を使用して、2 秒ごとに「Async function 2」を出力します。

    async_function1 と async_function2 に対して、それぞれ thread1 と thread2 という 2 つのスレッドを作成します。 thread モジュールの Thread クラスは、スレッドの作成と管理に使用されます。次に、start() メソッドを使用して 2 つのスレッドを開始します。これにより、別のスレッドで非同期関数の実行が開始され、それらを同時に実行できるようになります。
  • リーリー ###出力###

    この例の出力では、「非同期関数 1」が 1 秒ごとに、「非同期関数 2」が 2 秒ごとに連続して出力されます。このコードは 2 つのスレッドを開始し、それぞれが独自の非同期関数を実行します。メインスレッドは無限ループを通じて存続し、他のスレッドが無限に実行できるようにします。

    リーリー
  • 方法 3 - サブプロセスを使用する
  • サブプロセスは、Python プログラムで作成および管理できる独立したプロセスです。この方法では、subprocess モジュールを使用して 2 つの非同期関数を永久に実行します。

    ###文法### リーリー ###ここ、###

args (必須):

このパラメータは、実行するコマンドを指定します。文字列または一連の文字列を指定できます。

bufsize:

このパラメータは、I/O 操作に使用されるバッファ サイズを示します。デフォルト値は -1 で、システムのデフォルトのバッファ サイズを使用することを意味します。

bufsize:
    このパラメータは、I/O 操作に使用されるバッファ サイズを示します。デフォルト値は -1 で、システムのデフォルトのバッファ サイズを使用することを意味します。
  • ###例### この例には、async_function1 と async_function2 という 2 つの同一の非同期関数があります。

  • async_function1 time.sleep(1) を使用して、「非同期関数 1」を毎秒出力します。

  • async_function2 は、time.sleep(2) を使用して、2 秒ごとに「Async function 2」を出力します。
  • subprocess モジュールの subprocess.Popen クラスを使用して、スレッドの代わりにサブプロセスを作成します。各子プロセスは、対応する非同期関数を実行する個別の Python プロセスを実行することによって作成されます。サブプロセスは subprocess.Popen コンストラクターを使用して作成され、Python コマンドを渡して必要な関数を実行します。たとえば、['python', '-c', 'from module import async_function1; async_function1()'] は、別の Python プロセスから async_function1 を実行します。

    リーリー ###出力###
  • この例の出力では、「非同期関数 1」が 1 秒ごとに、「非同期関数 2」が 2 秒ごとに連続して出力されます。このコードは 2 つの子プロセスを作成し、それぞれが独自の非同期関数を実行します。メインプロセスは無限ループによって維持され、子プロセスが無限に実行できるようになります。
Async function 1
Async function 1
Async function 2
Async function 1
Async function 1
Async function 2
Async function 1
Async function 1
Async function 2

结论

在本文中,我们讨论了如何使用 Python 中的 asyncio 模块在 Python 中永久运行两个异步函数。使用 asyncio 进行异步编程为编写高性能和响应式 Python 应用程序开辟了新的可能性。通过利用异步函数和事件循环,您可以利用并发的力量并有效地管理多个任务。

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

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。