请解释一下,我阅读了文章https://habr.com/ru/company/otus/blog/503380/在那里执行了一个 ajax 请求,然后 django 在服务器上捕获它并将其发送到 celery。
好像ajax已经是异步的了,客户端在等待的时候不会冻结任何东西,如果没有celery,那么整个过程也是异步的吗?
说明为什么还要放芹菜?
请解释一下,我阅读了文章https://habr.com/ru/company/otus/blog/503380/在那里执行了一个 ajax 请求,然后 django 在服务器上捕获它并将其发送到 celery。
好像ajax已经是异步的了,客户端在等待的时候不会冻结任何东西,如果没有celery,那么整个过程也是异步的吗?
说明为什么还要放芹菜?
有几个原因。
首先,处理 Web 请求的应用程序通常具有有限数量的进程或负责处理请求的线程。如果一个请求的处理花费大量时间并且其中一定数量的请求同时到达,那么所有进程/线程都会很忙,并且根本不会处理新的请求。
使用 celery 时,这些后台任务的工作进程数是与 Web 服务器分开配置的(因此可以单独扩展)。
第二个原因是能够重新启动因某种原因中断的处理。如果您的请求直接由 Web 服务器工作进程处理,则失败将要求客户端再次重试相同的请求。如果使用像芹菜这样的解决方案,那么重复可以自动完成,无需客户的参与。celery 保留了一个任务队列,如果任务处理配置正确(粗略的说,我们在完成处理后从队列中取出一个任务),这个队列可以用于自动重复。