【问题标题】:Return a list from asyncio function从 asyncio 函数返回一个列表
【发布时间】:2019-01-31 08:04:03
【问题描述】:

我有以下代码。 我知道某处可能是错误的,但是它必须如何在运行后返回列表电报列表? 只想全局访问列表项?

telegramlist = []
telegramchannellist = ['TelethonChat-anti-kyle']


async def telegram_method():
    api_id = '*'
    api_hash = '*'

    client = TelegramClient('trendingsesion', api_id, api_hash)
    client.start()

    telegramdict = {}
    for ch in telegramchannellist:
        channel_username = ch
        channel_entity = client.get_entity(channel_username)
        posts = client(GetHistoryRequest(
            peer=channel_entity,
            limit=1,
            offset_date=None,
            offset_id=0,
            max_id=0,
            min_id=0,
            add_offset=0,
            hash=0))
        telegramdict[ch] = posts.messages # here if i write .messages shows a weird error, he want to be only posts
    telegramlist = list(telegramdict.values())
    return telegramlist

shuffle(telegramchannellist)
if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    telegramlistt = loop.run_until_complete(asyncio.gather(telegram_method()))
    loop.close()

【问题讨论】:

    标签: python function asynchronous python-asyncio


    【解决方案1】:

    您的main 协程中缺少await。更正后,它看起来像这样:

    async def main():
        telegramlist = await telegram_method()
        return telegramlist
    

    【讨论】:

    • 非常感谢您的回复。在我等待之后,我收到 Python 的错误消息:hastebin.com/hoquyapoyu.coffeescript
    • 如果我删除最后一行 loop.close() 我得到:hastebin.com/amuziyarez.cs
    • @NbaRo 你还需要await client.start() 方法,以及任何其他协程方法。
    • 我想是的,但我不知道怎么做 :(
    • @NbaRo 在你的代码中你有client.start()的地方,只写await client.start()。这适用于对协程的所有调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2014-01-08
    • 2021-02-21
    • 1970-01-01
    • 2019-05-20
    相关资源
    最近更新 更多