Python Lambda で Await を使用する

Olorunfemi Akinlua 2023年6月21日
Python Lambda で Await を使用する

非同期プログラミングは、マルチスレッドまたはマルチプロセッシングではありません。 代わりに、潜在的に長時間実行されるタスクを実行し、完了を待つのではなく、そのタスクがまだ実行されている間、プログラムが他のタスクに応答できるようにするのが並行プログラミングです。

非同期プログラミングでは、HTTP 要求のアクションまたはユーザーの選択に多くの時間がかかる可能性があるため、そのようなアクションがまだ実行されている間に他のタスクを実行できるようにすることは賢明です。

Python では、非同期プログラミングを実現するために、関数で async/await 機能を使用できますが、これは lambda 関数で行います。 この記事では、Python ラムダ関数で await を使用する可能性について説明します。

Python ラムダに async/await ラムダ がない

Python で非同期プログラミングを実行するには、並列プログラミングを可能にするために async/await 構文を使用する asyncio と呼ばれる組み込みの高レベル パッケージが必要です。

非同期操作を作成するには、async および await キーワードを使用できます。

import asyncio


async def main():
    print("Action One")
    await asyncio.sleep(1)
    print("Action Two")


asyncio.run(main())

出力:

Action One
Action Two

async キーワードを main() 関数に適用し、await キーワードを asyncio.sleep() ステートメントに適用しました。 しかし、それを lambda を介して無名関数に適用するにはどうすればよいでしょうか? 匿名または lambda 関数は名前なしで定義され、lambda キーワードを使用してそれを実現します。

3 で割り切れない数値をリストから削除したいとします。 別の関数を取る filter() メソッド (高階関数) を使用できます。

したがって、二度と使用しない可能性のある関数バインディングを定義する代わりに、lambda キーワードを使用して無名関数を使用できます。

myNums = [1, 2, 3, 4, 5, 6, 7]

myNums = list(filter(lambda x: x % 3 == 0, myNums))

print(myNums)

出力:

[3, 6]

しかし、非同期機能を lambda 関数に追加する方法はありますか? 簡単な答えはノーです。

Python の開発者は、lambdaasync 構文を追加することを正当化する 重要なユース ケースはありません と述べています。

また、lambda の命名は、lambda 関数の適切な使用法ではありません。 したがって、lambda 関数で機能的に使用するのは難しいでしょう。 さらに、lambda 関数を介して async 関数を渡すと、同期関数内で実行されます。

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

関連記事 - Python Lambda