如何 运行 长后台进程 - Heroku App - Dash Python

How to run long background processes - Heroku App - Dash Python

我正在使用 Dash 开发 棒球模拟器 应用程序。它使用 SGD 模型来模拟阵容和投手之间的游戏玩法。该应用程序(正在建设中)可以在这里找到:https://capstone-baseball-simulator.herokuapp.com/ and the repo: https://github.com/c-fried/capstone_heroku

总结一下这个问题:我希望能够在 heroku 服务器上运行阵容优化器

这可能有两个部分:1. 运行 避免超时的实际功能。 & 2. 运行ning.

显示函数进度

我在解决这个问题时遇到了几个问题:

  1. 该功能开销很大,无法在 30 秒超时前完成。 (需要几分钟才能完成。)

为此,我尝试按照这些说明 (https://devcenter.heroku.com/articles/python-rq) 创建一个 worker.py(仍在回购中),将函数移动到外部 .py...等等我认为问题是该过程仍然花费太长时间并因此终止。

  1. 我(有意地)在函数中使用了一个 global 变量,它在我 运行 本地时有效,但在部署时不起作用(出于我有点理解的原因 - 工人不共享内存 https://dash.plotly.com/sharing-data-between-callbacks)

我正在使用 global 来查看函数正在执行的操作的实时更新,因为它是 运行ning。同样,在本地作为黑客工作,但在服务器上不起作用。我不知道在没有某种全局操作的情况下我还能如何观察函数的进度。我想要一个聪明的解决方案,但我想不出。


我没有使用网络应用程序的经验,所以提前感谢您的建议。

解决这个问题的常用方法是,

  • 运行 异步长计算,例如使用 background service
  • 完成后,将结果放入共享存储space,例如Redis 缓存或 S3 存储桶
  • 使用 Interval 组件或 Websocket 组件检查更新

我可以推荐 Celery 来跟踪任务。