繁体   English   中英

无法在 AWS 中运行 While 循环 Python Lambda

[英]Cannot run a While Loop in AWS Python Lambda

import asyncio
from aiogram import Bot, Dispatcher, types

# Handlers
async def echo_hello(message: types.Message):
    while True:
        await message.reply("Hello!")
        await asyncio.sleep(20)
        
# AWS Lambda funcs
async def register_handlers(dp: Dispatcher):
    dp.register_message_handler(echo_hello, commands=['sayhello'])

async def process_event(event, dp: Dispatcher):
    Bot.set_current(dp.bot)
    update = types.Update.to_object(event)
    await dp.process_update(update)


async def main(event):
    bot = Bot(token=TOKEN)
    dp = Dispatcher(bot)

    await register_handlers(dp)
    await process_event(event, dp)

    return 'ok'


def lambda_handler(event, context):
    return asyncio.get_event_loop().run_until_complete(main(event))

我似乎无法在 AWS Python Lambda 中让我的电报机器人循环 Hello 消息。 如果我不知道如何获得 lambda_handler function,我只是将其视为来自https://github.com/DavisDmitry/aiogram-aws-serverless-example的示例

编辑:NVM 函数的默认超时最多为 15 分钟,因此任何循环最多只能工作 15 分钟。

正如@luk2302 在上面的评论中提到的,事实上,Lambdas 只有最多 15 分钟的上限,可由用户在设置中自定义。

如果设置为 15 分钟,则任何循环都将在条件允许的情况下执行该时间量。 当我问这个问题时,我并不知道这个事实,默认情况下超时值设置为 5 秒,而我的代码让 while 循环休眠 20 秒。 因此我无法收到任何重复的消息。 一旦我将它设置为 2 分钟(例如),它会重复该消息大约 6 次,然后停止。

Lambda 函数几乎永远运行,但这些函数不适合执行过程可能较长(包括循环)的函数。 为此,可以使用 EC2 实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM