python - 使用 Python 中的 API 调用运行需要很长时间的脚本的最佳方法
问题描述
我有一个当前运行脚本并根据脚本输出返回状态代码的 API。它还在脚本完成后通过另一个 API 提供文件。但是,在生产中,我发现该过程可能需要很长时间,并且请求可能会在脚本完成运行之前超时。我怎样才能使这个 API 不会等待脚本完成并且脚本会在第一个 API 调用响应后很好地发送文件?
解决方案
Web 服务器喜欢缩短请求/响应周期。当某些请求需要越来越长的时间才能满足时,就会出现需要“脱离进程”的工作以避免破坏 Web 服务器。
这种需求就是为什么存在像芹菜这样的东西的原因。这个想法是客户描述要在请求中完成的工作。处理程序将对该描述进行排队,获得一个 id 作为回报,并将该 id 在响应中传递回客户端。客户端记住该 id,然后轮询,传递该 id。同时,在别处运行的工作进程从队列中取出工作描述,完成工作,并返回结果。最终,投票请求会说“完成!” 而不是“请稍候”,客户端可以检索结果。
Flask Mega Tutorial在第22 章中介绍了一种使用Rq实现此目的的方法,它比 celery 更简单,但不够健壮。值得一看那一章来巩固总体思路。
推荐阅读
- javascript - 通过遍历数组来制作对象属性 - JS
- apache-spark - Spark Streams:状态使用
- angular - 在 Angular 应用程序中无法访问资产文件夹中的图像
- python - Pandas:根据另一列的值将列拆分为较小的列
- android - 无法发布免安装应用:您应该至少有一个通过网络“intent-filter”映射到站点“example.com”的活动 APK
- python - 时间数据 'n' 与格式不匹配 '%b %d %Y' 错误
- reactjs - 如何通过反应将道具传递给样式组件中的关键帧?
- ios - 如何在 coredata 中创建数据库视图
- javascript - 使用 innerHTML 从 string.replace 打印正则表达式匹配
- c# - 使用 XmlSerializer,如何为 List 设置元素名称?