Задать вопрос
RimMirK
@RimMirK
Вроде человек. Вроде учусь. Вроде пайтону

Как пофиксить RuntimeError: This event loop is already running?

Пытаюсь скачать видео с ТикТока. Использую TikTokApi.
Делаю все по докам, но выходит вот такой прикол
This event loop is already running
Traceback (most recent call last):
  File "D:\Programs\Python\Lib\site-packages\pyrogram\dispatcher.py", line 240, in handler_worker
    await handler.callback(self.client, *args)
  File "D:\codes\RimUserBot\userbot.py", line 50, in download
    with TikTokApi().api() as ttapi:
       ^^^^^^^^^^^
  File "D:\Programs\Python\Lib\site-packages\TikTokApi\tiktok.py", line 159, in __init__
    self._initialize(
  File "D:\Programs\Python\Lib\site-packages\TikTokApi\tiktok.py", line 205, in _initialize
    self._browser = asyncio.get_event_loop().run_until_complete(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Programs\Python\Lib\asyncio\base_events.py", line 629, in run_until_complete
    self._check_running()
  File "D:\Programs\Python\Lib\asyncio\base_events.py", line 588, in _check_running
    raise RuntimeError('This event loop is already running')
RuntimeError: This event loop is already running

код
from TikTokApi import TikTokApi
# код с юзерботом вырезан
with TikTokApi() as ttapi: # ошибка тут
            video = ttapi.video(url=url)
            await app.send_video(msg.chat.id, video.bytes())

пробовал без with
ttapi = TikTokApi()
...
то же самое.
либо обновлял. Больше ничего не запущено. Ссылка действительная. Пробовал TikTokApi().api() - то же самое
как пофиксить?
  • Вопрос задан
  • 2972 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Разработчик - идиот и не подумал, что его код может вызываться в асинхронной программе. Либа валится не только в асинхронной программе, но и в Jupyter Notebook, и в Google Collab, потому что и тот и тот по природе асинхронные. Фикс обещается с прошлого мая, а воз и ныне там.
Но на гитхабе описан костыль с пакетом nest-asyncio. Попробуй его. Просто поставь пакет и добавь в начало кода бота:
import nest_asyncio
nest_asyncio.apply()

С моей точки зрения это грязнущщий хак, но всё же лучше чем ничего.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы