【问题标题】:Telethon send messages in list in asynchronous mannerTelethon 以异步方式在列表中发送消息
【发布时间】:2021-11-23 15:42:20
【问题描述】:

抱歉,英语有问题...

所以,基本上,我有一个包含消息及其命运的列表:

messages = [(id_1, msg_1), (id_2, msg_2), (id_3, msg_3),]

我想要的是使用:async for msg in messages 但是,我的列表显然不是异步可迭代的(我使用的是 sqlite3)如何将其转换为异步可迭代列表?

【问题讨论】:

    标签: loops asynchronous python-asyncio telethon


    【解决方案1】:

    您不需要“异步可迭代列表”。您可以正常迭代:

    for (id, msg) in messages:
        # do things...
    

    如果你真的需要一个“异步可迭代列表”,你可以像这样包装它,但是请注意这可能是非常不必要的(而且它还需要最新的 Python 版本):

    async def make_async_iter(lst):
        for item in lst:
            yield item
    
    ...
    
    async for item in make_async_list(messages):
        # use item...
    

    【讨论】:

    • 1 - 谢谢! 2 - 我使用的是:@client.on(events.NewMessage),所以我可以同时发送和接收消息,但我试图让它们不会相互阻塞,这样整个事情就不会停止工作。 3 - 我想我会更好地看看这些例子。
    • 默认情况下,每次更新都会生成一个新的asyncio 任务,因此它们不会相互阻塞。如果您使用阻塞方法(例如 time.sleep 而不是 asyncio.sleep),只会出现问题。
    • 啊,非常感谢!我最终按照您之前的建议解决了问题,但这仍然有用!
    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2022-11-24
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多