Python, Asyn c, цикл одноэлементных событий - PullRequest
0 голосов
/ 18 марта 2020

У меня много асин c кода, и у меня есть вопрос.

Могу ли я иметь одноэлементное событие l oop во всем проекте или мне следует использовать get_event_loop() в каждой функции, методе, классе? Есть ли какие-то проблемы, чтобы объявить его один раз и использовать из любого места в проекте?

Например, у меня есть 3 файла app.py, views.py, internal.py

app .py

app = FastAPI()
loop = get_event_loop()

views.py

from app import app, loop

@app.get('/')
async def main(request):
   loop.create_task(<any coroutine>)
   return {'status': 'ok'}

internal.py

from app import loop

async def any_buisiness_logic():
    loop.create_task(<any coroutine>)
    return "task created"

Или мне следует get_event_loop() в каждом файле?

1 Ответ

1 голос
/ 18 марта 2020

Вместо этого вы можете использовать asyncio.create_task. L oop не требуется передавать в новых версиях Python.

Задача выполняется в l oop, возвращаемом get_running_l oop (), RuntimeError вызывается, если в текущем потоке нет l oop.

https://docs.python.org/3/library/asyncio-task.html#asyncio .create_task

...