【问题标题】:RuntimeError: Event loop is closed - TelegramRuntimeError:事件循环已关闭 - 电报
【发布时间】:2019-01-04 09:31:41
【问题描述】:

我正在尝试使用异步模块运行电报客户端,如第 15 页上的 documentation 中所示

import telethon
from telethon import TelegramClient, events
import asyncio

client = TelegramClient(USERNAME, API_ID, API_HASH)

async def main():
    await client.start()

if __name__ == '__main__':
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

当尝试运行await client.start() 时,我收到以下错误。

Task was destroyed but it is pending!
task: <Task pending coro=<MTProtoSender._send_loop() running at 
/home/myuser/.local/lib/python3.5/site-packages/telethon/network/mtprotosender.py:347> wait_for=<Future pending cb=[Task._wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending coro=<MTProtoSender._recv_loop() running at /home/myuser/.local/lib/python3.5/site-packages/telethon/network/mtprotosender.py:411> wait_for=<Future pending cb=[Task._wakeup()]>>
Exception ignored in: <coroutine object MTProtoSender._send_loop at 0x7f27c688b468>
Traceback (most recent call last):
  File "/home/myuser/.local/lib/python3.5/site-packages/telethon/network/mtprotosender.py", line 347, in _send_loop
  File "/home/myuser/.local/lib/python3.5/site-packages/telethon/network/mtprotosender.py", line 720, in get
  File "/usr/lib/python3.5/asyncio/queues.py", line 170, in get
  File "/usr/lib/python3.5/asyncio/futures.py", line 227, in cancel
  File "/usr/lib/python3.5/asyncio/futures.py", line 242, in _schedule_callbacks
  File "/usr/lib/python3.5/asyncio/base_events.py", line 497, in call_soon
  File "/usr/lib/python3.5/asyncio/base_events.py", line 506, in _call_soon
  File "/usr/lib/python3.5/asyncio/base_events.py", line 334, in _check_closed
RuntimeError: Event loop is closed
Task was destroyed but it is pending!
task: <Task pending coro=<UpdateMethods._update_loop() running at /home/myuser/.local/lib/python3.5/site-packages/telethon/client/updates.py:206> wait_for=<Future pending cb=[Task._wakeup()]>>

有什么方法可以在不进入模块代码的情况下解决这个问题,还是我在 asyncio 上做错了什么?

【问题讨论】:

  • 尝试删除或注释掉 loop = asyncio.new_event_loop()asyncio.set_event_loop(loop) 行。
  • @user4815162342 仍然给出完全相同的错误。如果我删除 await client.start() 并用 pass 替换它,它运行正常。如果我删除 await 并运行 client.start() 它会给我错误 connect.py:15: RuntimeWarning: coroutine 'AuthMethods.start' was never awaited client.start()

标签: python-3.x telegram python-asyncio telethon


【解决方案1】:
api_id = your id
api_hash = ''
bot_token = ''

with TelegramClient('session name', api_id, api_hash).start(bot_token=bot_token) as client:
     client.send_message('id', message)

如果您不使用机器人并使用您的帐户删除启动机器人代码并且也不需要机器人令牌

使用 Telethon 的新闻版本并测试两者(telethon、telethon.sync)

如果它不能帮助使用芹菜,它会为你做的 我在我的 django 项目和工作中使用它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多