Django - 是否应该始终通过任务处理程序(例如 Celery)发出外部 API 请求?

and*_*roy 5 django middleware celery

我有一个 Django 应用程序,我在其中创建了一个自定义中间件。

它的工作原理如下:

  1. 中间件拦截每个请求中的令牌(用于标识用户),并使用该令牌向外部 API 发出请求。
  2. 外部 API 返回发出原始请求的用户具有的权限。
  3. 中间件完成,用户根据其权限获取返回的数据

这是我的问题:因为我的应用程序必须等待 API 请求返回才能处理请求,所以使用 celery 等任务队列是否仍然有意义?在我等待响应时,它不是仍然需要阻塞线程吗?

Dan*_*man 7

不,在这里使用 Celery 根本没有任何意义。这适用于可以完全处于进程外的任务。一个很好的例子是发送确认电子邮件;发送到浏览器的响应不必等待发送电子邮件,因为它不以任何方式依赖它。

在您的情况下,响应明确取决于 API 的值。使用 Celery 没有任何好处,而且会使整个过程比它需要的复杂得多。