簡體   English   中英

編寫用於 AWS Lambda 的異步代碼的正確方法是什么?

[英]What is the correct way to write asyncio code for use with AWS Lambda?

我寫了以下代碼:


import asyncio

loop = asyncio.get_event_loop()

async def get_urls(event):

    return {'msg':'Hello World'}

def lambda_handler(event,context):

    return loop.run_until_complete(get_urls(event))

我試圖完成以下但速度更快。


def lambda_handler(event, context):
    # TODO implement
    return {'msg':'Hello World'}

在 AWS Lambda 環境中編寫此代碼的正確方法是什么?

對我有用...您需要選擇運行時“Python 3.6”或“Python 3.7”。

import asyncio

loop = asyncio.get_event_loop()

async def get_urls(event):
    return {'msg':'Hello World'}

def lambda_handler(event, context):
    return loop.run_until_complete(get_urls(event))

在此處輸入圖像描述

異步執行同時做很多事情。 你只是在做一件事。 你做一件事的速度不能超過做一件事所花費的時間。 異步執行允許您執行通常會同時(同步)一個接一個地執行的獨立任務,然后返回所有任務的結果。 本質上,您必須執行多個操作。

對於 Python 3.7+,您可以使用asyncio.run()來執行協程:

import asyncio

# The AWS Lambda handler
def handler(event, context):
    asyncio.run(main())

async def main():
    # Here you can await any awaitable
    await asyncio.sleep(1)
    await asyncio.gather([coroutine_1, coroutine_2])

以下是如何在 AWS Lambda 上使用 asyncio、aiohttp 和 aiobotocore 開發、測試和部署異步 Python 函數的完整示例: https ://github.com/geeogi/async-python-lambda-template

需要在本地安裝 aioboto3 作為部署 zip 包的一部分`

import asyncio
import aioboto3



async def list_s3_objs (bucket):
    async with aioboto3.client("s3") as s3_client:
        objs = await s3_client.list_objects(Bucket=bucket)
    return objs['Contents']

def lambda_handler(event, context):
    loop = asyncio.get_event_loop()
    loop.run_until_complete(list_s3_objs('bucket_name'))

`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM