python3 -m venv venv
. venv/bin/activate
pip install -r requirements.txt
./serve.sh
(На Windows активация venv: venv\Scripts\activate.bat)
Чтобы пользоваться asyncio достаточно понять несколько простых концептов:
- Корутина - функция с
async
в объявлении. В отличии от обычной фунции её необходимо запускать с помощью await либо create_task
async def coroutine(arg):
print(f'Hello {arg}. Starting...')
asyncio.sleep(2)
print('done')
await
- дождаться выполнения корутины
await coroutine('programmer')
print('Awaited')
# > Hello programmer. Starting...
# (2sec pause)
# > done
# > Awaited
asyncio.create_task()
: не ждать выполнения корутины, запустить корутину "в фоне"
asyncio.create_task(coroutine('hacker'))
print('Not waiting')
# > Hello hacker. Starting...
# > Not waiting
# (2sec pause)
# > done
Queue
- очередь, новые элементы в которой можно ожидать (await)
new_element = await queue.get()
# Put в очереди тоже необходимо ждать (если очередь переполнена)
await queue.put(new_element)
asyncio.run()
: как await только в не асинхроном контексте. В server.py не нужна так как сам асинхронный контекст создаётся ASGI сервером (uvicorn)