aiohttp ConnectionError:断开连接后无法发送请求

问题描述 投票:0回答:1

我正在使用aiohttp作为服务器和telethon客户端来发送消息。

从telegrammodule.py运行此编辑后的代码运行正常:

from telethon import TelegramClient
import asyncio

api_id = censored
api_hash = "censored"
client = TelegramClient('anon', api_id, api_hash)

async def sendMessageToUser(user, message):
        await client.send_message(user, message)

def sendMessage(user, message):
        with client:
                client.loop.run_until_complete(sendMessageToUser(user, message))


sendMessage("censored", "Hello")

这是我尝试从server.py调用函数sendMessage()时遇到的错误:

======== Running on http://0.0.0.0:5000 ========
(Press CTRL+C to quit)
Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/aiohttp/web_protocol.py", line 418, in start
    resp = await task
  File "/usr/local/lib/python3.7/dist-packages/aiohttp/web_app.py", line 458, in _handle
    resp = await handler(request)
  File "server.py", line 9, in send
    response = await sendMessage(user, message)
  File "/home/user/telegram_user_bot/telegrammodule.py", line 13, in sendMessage
    client.loop.run_until_complete(sendMessageToUser(user, message))
  File "/usr/lib/python3.7/asyncio/base_events.py", line 571, in run_until_complete
    self.run_forever()
  File "/usr/lib/python3.7/asyncio/base_events.py", line 526, in run_forever
    raise RuntimeError('This event loop is already running')
RuntimeError: This event loop is already running
Task exception was never retrieved
future: <Task finished coro=<sendMessageToUser() done, defined at /home/user/telegram_user_bot/telegrammodule.py:8> exception=ConnectionError('Cannot send requests while disconnected')>
Traceback (most recent call last):
  File "/home/user/telegram_user_bot/telegrammodule.py", line 9, in sendMessageToUser
    await client.send_message(user, message)
  File "/usr/local/lib/python3.7/dist-packages/telethon/client/messages.py", line 752, in send_message
    result = await self(request)
  File "/usr/local/lib/python3.7/dist-packages/telethon/client/users.py", line 53, in __call__
    future = self._sender.send(request, ordered=ordered)
  File "/usr/local/lib/python3.7/dist-packages/telethon/network/mtprotosender.py", line 170, in send
    raise ConnectionError('Cannot send requests while disconnected')
ConnectionError: Cannot send requests while disconnected

这是来自server.py的代码:

from telegrammodule import sendMessage
from aiohttp import web
import asyncio

async def send(request):
        data = await request.post()
        user = data['user']
        message = data['message']
        response = await sendMessage(user, message)

app = web.Application()
app.router.add_post("/send", send)

if __name__ == "__main__":
        web.run_app(app, port=5000)

以及来自telegrammodule.py的这里:

from telethon import TelegramClient
import asyncio

api_id = censored
api_hash = "censored"
client = TelegramClient('anon', api_id, api_hash)

async def sendMessageToUser(user, message):
        await client.send_message(user, message)

async def sendMessage(user, message):
        async with client:
                client.loop.run_until_complete(sendMessageToUser(user, message))

我不知道如何解决问题。我该如何解决?

python aiohttp
1个回答
0
投票

如果循环已经在运行,则无法再启动它。使用create_task将任务添加到正在运行的循环中。

根据您的情况

create_task

我想会是个解决办法。

© www.soinside.com 2019 - 2024. All rights reserved.