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 ?
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