如何从芹菜返回卸载的过程响应?

时间:2018-11-30 02:37:05

标签: python django celery

我在生成pdf的Web应用程序上工作,它返回生成的pdf文件。以前,我在主要流程中处理过pdf生成。我的上司告诉我,这可能会导致应用程序停止运行,因为Django是同步的。

因此,他建议将处理过程转移到芹菜上,我尝试了一下,并对如何使用芹菜进行处理有了想法。但是我不知道如何将响应返回给客户端。

我可以返回正在处理的响应,但是pdf文件呢?还返回可能的网址吗?并不时发送请求?

1 个答案:

答案 0 :(得分:1)

通常,这也是通过使HTTP交互也异步实现的。

您将返回一个将来可以使用该PDF的链接或一个处理状态页面,而不是返回PDF,客户端可以轮询该链接以检索PDF。通常,这是通过返回HTTP 202 Accepted响应完成的。

在不同情况下可能适用的其他替代方法是在WebSocket推送消息中返回响应。如果您已经在应用程序中建立了WebSocket连接,或者您需要的延迟时间比轮询所提供的延迟时间短,则这可能是合适的。如果处理过程花费的时间很长(例如数小时),则可以向用户询问其电子邮件地址(或从用户的个人资料中获取电子邮件地址),并在他们可以检索结果时向用户发送电子邮件。