【问题标题】:Django - Should external API requests always be made through a task handler (e.g. Celery)?Django - 是否应该始终通过任务处理程序(例如 Celery)发出外部 API 请求?
【发布时间】:2017-03-07 20:32:33
【问题描述】:
我有一个 Django 应用程序,我在其中创建了一个自定义中间件。
它的工作原理如下:
- 中间件在每个请求中截获一个令牌(用于标识用户),并使用该令牌向外部 API 发出请求。
- 外部 API 返回发出原始请求的用户所拥有的权限。
- 中间件完成,用户根据权限获取返回数据
这是我的问题:
因为我的应用必须等待 API 请求返回才能处理请求,所以使用 celery 之类的任务队列仍然有意义吗?在我等待响应时,它是否仍然需要阻塞线程?
【问题讨论】:
标签:
django
celery
middleware
【解决方案1】:
不,在这里使用 Celery 根本没有任何意义。那是针对可以纯粹在进程外的任务。一个很好的例子是发送确认电子邮件;发送到浏览器的响应不必等待电子邮件发送,因为它不依赖于它。
在您的情况下,响应明确取决于 API 中的值。使用 Celery 不会有任何收获,而且会使整个过程变得比需要的复杂得多。