Re:Django 3
by andrewgodwin on Monday December 02, 2019 @10:27AM
(#21683166)
It's worth pointing out that the ASGI support in this release is very low level, and doesn't let you write async views or anything yet. We're still working on that.
[ Parent
| on HN ]
> Note that as a side-effect of this change, Django is now aware of asynchronous event loops and will block you calling code marked as “async unsafe” - such as ORM operations - from an asynchronous context.
Am I correct to understand this as meaning async views can’t even read from the database yet? I guess the only use cases for ASGI views currently would be interacting with outside-Django backends that implement async support and such?
Thanks for your work on this.
If I am willing to hack a bit, is it possible?
What is the main obstacle? Is it all middleware?
Andrew gave a recent talk about it here https://www.youtube.com/watch?v=d9BAUBEyFgM
middleware is a part of it, then there's the ORM, caching and anything else that does IO.
If you’re in the hacking mode - what do you think of taking the Django orm and grafting it onto fast api - sort of like a stand-alone sqlalchemy but with all the ease and power or django’s querysets...
Django ORM is not async so using it with FastAPI would block the event loop. I guess you could wrap the calls in sync_to_async from asgiref but it wouldn't be pretty.
Another option is using something like Tom Christie's orm project (https://github.com/encode/orm), which is a wrapper on top of sqlachemy with a django like interface.
FastAPI runs blocking IO/sync functions in a separate thread pool to work around this issue.
Thanks for the suggestion - very interesting.