Comments (2)
I haven't been using any asgi for over a year now but if I had to guess - background tasks are not as background as it seems. They still run within the request-response cycle. They are initialized just after the response has been sent (asynchronously). It's the same event loop, so "the context of the context
" will be available. If one of these tasks was doing some computation ( or time.sleep(5)
) your worker would be blocked as its event loop would be blocked.
If I understand it correctly, response.__call__
is exactly what self.app(scope, receive, send_wrapper)
is doing, so the context hasn't been reset yet.
starlette-context/starlette_context/middleware/raw_middleware.py
Lines 95 to 98 in 70d187c
So yeah, although surprising, it makes sense.
from starlette-context.
ooh, I see. The background task is processed right after, literally the next line after the response is sent, which as seen from the middleware, is still in the try
block. the reset is only after, in the finally
block, which ends up executed after the response AND the background task.
I understand now, and feel I can sleep soundly again.
from starlette-context.
Related Issues (20)
- Possible to have multiple RawContextMiddlewares? HOT 3
- codecov report not being uploaded HOT 1
- Question: Can I add request-id into uvicorn.access log? HOT 2
- Can't write new plugin - plugin is not iterable HOT 4
- Testing code that relies on context vars without a full test client / app HOT 8
- Consider removing `RawContextMiddleware` and keeping only `ContextMiddleware` after resolving memory usage issue HOT 8
- How to use context in Jinja (or any other template engine)? HOT 1
- No module named '_contextvars' HOT 1
- How to get request.body from starlette-context plugin? HOT 2
- async pytests fail when using logging middleware from the examples HOT 3
- Improved logging HOT 4
- Can't use http middleware HOT 1
- Improving the __repr__ method of _Context HOT 2
- Properly use pyproject.toml HOT 2
- 0.3.3 does not contain the testing helper request_cycle_context HOT 2
- ContextDoesNotExistError on FastAPI Custom Exception Handler HOT 8
- Docs are outdated HOT 1
- Exceptions should inherit from Exception, not BaseException HOT 2
- bump starlette 0.23.1 -> 0.25 and other deps
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 starlette-context.