问题
Django is synchronous or asynchronous?
I want to know that the Django Framework is Synchronous or Asynchronous.
I have heard about the interview problems they ask about the framework you are using is synchronous or asynchronous. So I want to know the meaning of Synchronous and Asynchronous in terms of web development.
回答1:
Django itself is synchronous.
each HTTP request will be handled completely synchronously.
However you have extensions like django-channels ( https://github.com/django/channels ) , which are asynchronous and are intended for web sockets / etc.
This is a little oversimplified: but synchronous programming is if you write code, that handles one HTTP request from beginning to end and that is executed in a thread or in a process and if one process / one thread handles only one request at a time.
With python in particular with asyncio or with twisted one can write code such, that one process/thread can handle multiple requests. Whenever one request waits for new data on the network to be received or for a chunk of data to be sent out it can handle another request until this other requests waits for network to be ready.
Django versions < 3.0 do not use twisted or asyncio.
New web servers / web apps however don't only handle http requests, but can also use web sockets. The Django channels module is built for handling web sockets. It is implemented with asyncio, which allows to handle many web sockets with one process only. it will interact with the synchronous parts of Django via messages (e.g. redis)
Addendum: as @Sayse pointed out Django 3.0 will support asynchronous code. However: ORM operations will still be synchronous only if I understand. They will fail in an async event loop with a SynchronousOnlyOperation exception. So probably most real Django views will fail, as one of the reasons of Django is to use an ORM for data base access.sections
来源:https://stackoverflow.com/questions/58548089/django-is-synchronous-or-asynchronous