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

Django - Should external API requests always be made through a task handler (e.g. Celery)?

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

它的工作原理如下:

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

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

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

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