【问题标题】:How to run long background processes - Heroku App - Dash Python如何运行长时间的后台进程 - Heroku App - Dash Python
【发布时间】:2021-01-26 22:14:23
【问题描述】:

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

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

这可能有两个部分: 1. 运行实际函数同时避免超时。 & 2. 显示函数运行的进度。


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

  1. 该功能代价高昂,无法在 30 秒超时之前完成。 (需要几分钟才能完成。)

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

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

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


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

【问题讨论】:

    标签: python function heroku plotly-dash worker


    【解决方案1】:

    解决此问题的常用方法是,

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 2016-03-23
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多