"получил будущее прикреплен к другой ошибке l oop "при использовании websocket.send (msg) через некоторое время - PullRequest
1 голос
/ 05 февраля 2020

Я использую websocket для отправки и получения сообщений в python. Я использовал «websocket.send (msg)» для отправки сообщений в следующих формах:

await ws.send(message)

и

asyncio.run(ws.send(message))

через некоторое время l oop, в котором я впервые проверяю живо ли соединение, а затем отправлять сообщения с помощью этих команд. Во всех из них, если количество отправок мало, проблем нет, но когда оно увеличивается, я получаю это исключение для отправки сообщения

Task <Task pending coro=<RunSocket() running at <ipython-input-1-b17eaf75a3de>:182> cb=[_run_until_complete_cb() at D:\Anaconda\InstallationFolder\lib\asyncio\base_events.py:158]> got Future <Future pending> attached to a different loop

«Обратите внимание, что RunSocket является именем одной из моих функций»

Тогда я получаю эту ошибку:

got Future <Future pending> attached to a different loop

Также я попробовал этот код:

asyncio.ensure_future(await ws.send(message))

Но он не отправлял никаких сообщений. Может кто-нибудь помочь мне с этой ошибкой? Любая помощь будет оценена.

1 Ответ

1 голос
/ 05 февраля 2020

получил Future, привязанный к другому l oop

Когда вы создаете какой-то асинхронный c объект, он присоединяется к текущему событию l oop (основной поток имеет один по умолчанию). Ожидается, что с асинхронным объектом c будет работать то же самое событие l oop. asyncio.run создает новое событие l oop и устанавливает его текущим. Результат - вы прикрепили asyn c объект к одному событию l oop, но пытаетесь использовать его с другим. Отсюда и ошибка.

Чтобы ее избежать, вы должны создать асин c объект после того, как новое событие l oop создано asyncio.run:

async def main():
    ws = ...  # create object after asyncio.run is started
    res = ws.send(message)
    return res

asyncio.run(main())
...