Fastapi: [QUESTION] get_running_loop/get_event_loop doesnt seem to run in fastapi..but runs in starlette

Created on 22 Mar 2020  路  3Comments  路  Source: tiangolo/fastapi

This works in Starlette

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import inspect
import os
import sys

import asyncio

import uvicorn
from starlette.applications import Starlette
from starlette.responses import JSONResponse

app = Starlette(debug=True)


def main():
    CONFIG = uvicorn.Config(
        app,
        host="0.0.0.0",
        port=8000,
        lifespan="on",
        loop="uvloop",
        log_level="info",
        use_colors=True,
        workers=1,
    )
    SERVER = uvicorn.Server(config=CONFIG)
    LOOP = asyncio.new_event_loop()
    asyncio.set_event_loop(LOOP)

    try:
        LOOP.run_until_complete(SERVER.serve())

    except asyncio.CancelledError:
        pass

    # uvicorn.run(app, host='127.0.0.1', port=8080)


@app.route('/')
async def image(request):
    # ext = request.path_params['ext']
    loop = asyncio.get_running_loop()
    return JSONResponse({'hello': 'world'})



if __name__ == '__main__':
    main()

This does not work in fastapi


from fastapi import FastAPI
import asyncio
import uvicorn

import logging

app = FastAPI()


@app.get("/")
def root():
    loop = asyncio.get_running_loop()
    return{"hello":"world"}


if __name__ == "__main__":
    logging.basicConfig(level=2, format="%(levelname)-9s %(message)s")
    CONFIG = uvicorn.Config(
        app,
        host="0.0.0.0",
        port=8000,
        lifespan="on",
        loop="asyncio",
        log_level="info",
        use_colors=True,
        workers=1,
    )
    SERVER = uvicorn.Server(config=CONFIG)

    LOOP = asyncio.new_event_loop()
    asyncio.set_event_loop(LOOP)

    try:
        LOOP.run_until_complete(SERVER.serve())
    except asyncio.CancelledError:
        pass

I'm looking to access the global event loop .
am i doing anything wrong ?

question

All 3 comments

You need async for your root() function in your FastAPI app, otherwise it's running in a threaded pool.

Thanks for your help here @phy25 ! :rocket: :cake:

If that answers your question you can close this issue @sandys

closed with thanks

Was this page helpful?
0 / 5 - 0 ratings