首页 > 解决方案 > 使用 Python 中的 API 调用运行需要很长时间的脚本的最佳方法

问题描述

我有一个当前运行脚本并根据脚本输出返回状态代码的 API。它还在脚本完成后通过另一个 API 提供文件。但是,在生产中,我发现该过程可能需要很长时间,并且请求可能会在脚本完成运行之前超时。我怎样才能使这个 API 不会等待脚本完成并且脚本会在第一个 API 调用响应后很好地发送文件?

标签: pythonflaskparallel-processingsubprocess

解决方案


Web 服务器喜欢缩短请求/响应周期。当某些请求需要越来越长的时间才能满足时,就会出现需要“脱离进程”的工作以避免破坏 Web 服务器。

这种需求就是为什么存在像芹菜这样的东西的原因。这个想法是客户描述要在请求中完成的工作。处理程序将对该描述进行排队,获得一个 id 作为回报,并将该 id 在响应中传递回客户端。客户端记住该 id,然后轮询,传递该 id。同时,在别处运行的工作进程从队列中取出工作描述,完成工作,并返回结果。最终,投票请求会说“完成!” 而不是“请稍候”,客户端可以检索结果。

Flask Mega Tutorial在第22 章中介绍了一种使用Rq实现此目的的方法,它比 celery 更简单,但不够健壮。值得一看那一章来巩固总体思路。


推荐阅读