При запуске .render () (из reports_html) в цикле событий asyncio я получаю ошибку «Этот цикл событий уже запущен» - PullRequest
0 голосов
/ 04 сентября 2018

Я создаю бот Discord, используя discord.py, который получает результаты футбольных матчей в реальном времени от ESPN. То, что у меня пока есть:

Bot.py:

import discord, asyncio
from Scores import GetScores

client = discord.Client()

@client.event
async def on_message(message):
    if message.content.startswith("!scores"):
        Output = GetScores(message.content)

# rest of code

Scores.py:

from requests_html import HTMLSession

def GetScores(Message):
    Link = "http://www.espn.co.uk/football/scoreboard"

    Session = HTMLSession()
    Response = Session.get(Link)
    Response.html.render()

# rest of code  

Поэтому, когда команда «! Scores» отправляется в Discord, Bot.py запускает цикл обработки событий и вызывает функцию «GetScores» из Scores.py.

Проблема в том, что при запуске Response.html.render() выдается ошибка «Этот цикл событий уже запущен». Полная ошибка с этого момента:

    Response.html.render()
  File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\requests_html.py", line 572, in render
    self.session.browser  # Automatycally create a event loop and browser
  File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\requests_html.py", line 680, in browser
    self._browser = self.loop.run_until_complete(pyppeteer.launch(headless=True, args=['--no-sandbox']))
  File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\asyncio\base_events.py", line 454, in run_until_complete
    self.run_forever()
  File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\asyncio\base_events.py", line 408, in run_forever
    raise RuntimeError('This event loop is already running')
RuntimeError: This event loop is already running  

С эта проблема GitHub Я обнаружил, что код не предназначен для запуска в существующем цикле событий. Тем не менее, мне интересно, есть ли обходной путь в asyncio, чтобы позволить этому работать в этой ситуации. Я бы предпочел, чтобы я нашел обходной путь, а не другое решение / модуль, так как я написал все это, используя этот метод, прежде чем тестировать его в цикле событий Discord и выяснить, что он не работает.

Любая помощь будет принята с благодарностью, спасибо!

...