Comments (3)
Thank you for the very clear test setup.
It appears FastAPI uses a threadpool for servicing requests and that the actual deadlock is in one of the threads:
Exception ignored in: <module 'threading' from '/usr/lib64/python3.11/threading.py'>
Traceback (most recent call last):
File "/usr/lib64/python3.11/threading.py", line 1574, in _shutdown
lock.acquire()
My guess is that nest_asyncio changes the order of how cleanup is done in FastAPI. This is an issue within FastAPI itself.
The deadlock can be circumvented by not using Depends
in main.py:
import nest_asyncio
from fastapi import FastAPI, Depends
from application.dependencies import get_service
from application.service import Service
app = FastAPI()
nest_asyncio.apply()
service: Service = get_service()
@app.get("/asyncio-demo")
async def get_cat_facts(): # service: Service = Depends(get_service)):
return {"facts": (service.collect_cat_facts())}
from nest_asyncio.
Do you have an isolated test case that demonstrates the problem.
from nest_asyncio.
Hi @erdewit
Yes sure, see Demo Project.
It's the minimal setup I created for demonstrating the mentioned behaviour.
from nest_asyncio.
Related Issues (20)
- 1.5.2 and 1.5.3 broke some current_task detection HOT 2
- 1.5.1-1.5.4 is breaking vaex due to #61 HOT 3
- nested tasks causing deadlock? HOT 1
- Request stuck in ProcessPoolExecutor HOT 4
- feature request: unapply HOT 1
- DeprecationWarning on Python 3.10
- RuntimeError: cannot enter context: <_contextvars.Context object at %> is already entered HOT 1
- ThreadPoolExecutor issue HOT 8
- Release tag for v1.5.6 HOT 1
- Lost Logs HOT 1
- nest_ayncio breaks tests under Python 3.10.9 HOT 2
- nest_asyncio.apply not working unless entire asyncio package is imported HOT 1
- strange hanging behavior with `nest_asyncio` when used in combination with `concurrent.futures `ProcessPoolExecutor` HOT 3
- RFE: is it possible to start making github releases?🤔 HOT 2
- Nested asyncio.run is parallel on first call but serial on second HOT 1
- How to share websocket context in quart?
- After `apply()` and `asyncio.run()`, Jupyter kernel cannot execute any code HOT 7
- Collision with AsyncIO HOT 1
- `nest_asyncio` breaks `discord.py`
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nest_asyncio.