RuntimeError: В проекте Django нет текущего цикла событий в потоке 'Thread-1'
У меня есть проект Django, который должен анализировать некоторые данные с определенного веб-сайта и сохранять их в базе данных.
В приложении я использую requests_html, который каким-то образом зависит от asyncio, который выдает ошибку каждый раз, когда я пытаюсь сделать запрос. (Я должен использовать requests_html, а не beautifulsoup, потому что мне нужно, чтобы скрипты были преобразованы в html)
Вот изолированная проблема:
# project/app/render_js.py
import requests_html
def render_js(url):
session = requests_html.HTMLSession()
r = session.get(url)
r.html.render()
return r.html.text
# project/project/views
from django.http import HttpResponse
from app.render_js import render_js
url = 'some url'
def view(request):
print(render_js(url))
return HttpResponse("<h1>success!</h1>")
# project/project/urls
from django.urls import path
from .views import view
urlpatterns = [
path('', view)
]
При попытке выполнить GET запрос к http://127.0.0.1:8000/ бросается:
Внутренняя ошибка сервера: / Traceback (последний последний вызов): File "C:\Users\User\PycharmProjects\project\venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner response = get_response(request) Файл "C:\Users\User\PycharmProjects\project\venv\lib\site-packages\django\core\handlers\base.py", строка 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) Файл "C:\Users\User\PycharmProjects\project\project\project\views.py", строка 6, in view print(render_js('https://docs.python.org/3.7/library/threading.html#threading.Thread.run')) Файл "C:\Users\User\PycharmProjects\project\app\render_js.py", строка 7, in render_js r.html.render() Файл "C:\Users\User\PycharmProjects\project\venv\lib\site-packages\requests_html.py", строка 586, в render self.browser = self.session.browser # Автоматическое создание цикла событий и браузера Файл "C:\Users\User\PycharmProjects\project\venv\lib\site-packages\requests_html.py", строка 727, в browser self.loop = asyncio.get_event_loop() Файл "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\asyncio\events.py", строка 642, в get_event_loop raise RuntimeError('В потоке %r нет текущего цикла событий'. RuntimeError: Нет текущего цикла событий в потоке 'Thread-1'.