не осилили). Джанга через ASGI.
В общем, в джангу прилетает ГЕТ запрос. Если эндпойнт завершается слешом, то на момент импорта views.py ивент луп создан. А если слеша нет, то и луп не создан.
Вопрос - почему/зачем так?
Момент импорта тебя зачем волнует?
А у меня сайд эффект случился из-за этого)) Дело в том, что у меня в глобальной области views.py создаётся инстанс моего класса. На днях там в конструкторе появился вызов asyncio.Event(), и теперь он ругается, что я пытаюсь создать ивент вне лупа.
Полагаю, стоит выкинуть из глобальной области видимости такие вещи
Согласен) Но я пока не понимаю, где и как его размещать. И на этот вопрос в этом чате мне не ответили) Не могу найти инфы пока...
Эм. Эвент прекрасно создаётся вне лупа
Ну а зачем тебе вообще глобальный Эвент в веб приложении?
Вот такой код: try: # print(asyncio.get_event_loop()) q = asyncio.Queue() except Exception: import traceback print(f'Exception during call "asyncio.Queue()":\n{traceback.format_exc()}') print('') расположенный в глобальной области views.py Даёт вот такой эксепшн: Traceback (most recent call last): File "C:\Work\repo\test-dialer\td\views.py", line 31, in <module> q = asyncio.Queue() File "C:\Program Files (x86)\Python38-32\lib\asyncio\queues.py", line 35, in __init__ self._loop = events.get_event_loop() File "C:\Program Files (x86)\Python38-32\lib\asyncio\events.py", line 639, in get_event_loop raise RuntimeError('There is no current event loop in thread %r.' RuntimeError: There is no current event loop in thread 'ThreadPoolExecutor-0_0'.
Попробуй создавать эти вещи в фабрике приложения, а не где попало
Дык так и делаю) Но фабрику-то где создавать?)
А фабрику можно сделать асинхронной?
Возможно, мы по-разному видим фабрику. У меня это объект, который реализует методы типа дай_то(), дай_сё()
Обсуждают сегодня