【问题标题】:hosting a flask webapp and CRON-activated Python script "together"“一起”托管烧瓶 webapp 和 CRON 激活的 Python 脚本
【发布时间】:2014-07-28 07:10:51
【问题描述】:

我有一个 Python 程序,它可以轮询来自网络的数据,将其保存到数据库中,然后发出条件警报。

我还有一个 Web 应用程序,可以将其中的一些数据显示到网站上。上述 Python 轮询程序将要显示的数据保存到 Web 应用程序打开的 Pickle 对象中。

它们最终将托管在我的 VPS 上

我在本地计算机上运行了网络应用程序,但尚未将其发布到网络上。轮询程序每分钟通过 CRON 运行一次。

关于网络应用程序(基于Miguel Grinbergs awesome Flask mega tutorial),我是否只需调用根文件夹中的“run.py”脚本并将其发送到后台,以便在我关闭 shell 后它仍然处于活动状态?

如何确保 Web 上显示的数据始终是投票程序保存的最新数据?它会在浏览器中自动重新加载吗?这些是否应该进一步隔离?

文件结构如下

my_program_root_FOLDER
- run.py (for web_app)
- polling_program_code_FOLDER
-- file_run_via_CRON_for_polling
- web_app_FOLDER
-- static_FOLDER
--- Pickle_object (with data for web app)

【问题讨论】:

  • 看起来你想做一些奇怪的事情......你不能有事件驱动系统吗? cron 有什么用?为什么要多次调用“run.py”? (它仅用于运行应用程序)。为什么您的烧瓶应用程序无法从数据库中读取数据?您不能将带有 POST 请求的腌制对象发送到您的烧瓶应用程序吗?

标签: python unix cron flask


【解决方案1】:

关于网络应用程序(基于 Miguel Grinbergs 精彩的 Flask 大型教程构建),我是否只需调用根文件夹中的“run.py”脚本并将其发送到后台,以便在我关闭我的壳?

不,您必须使用 screen 之类的东西,但最好的方法是将您的应用程序作为服务运行,使用某种服务管理器来确保您的应用程序在崩溃时自动重启。 uwsgi 可以为您做这件事,等等。其他可能性是supervisordrunit。如果您的应用暴露在开放的互联网上,请不要忘记禁用 Flask 的调试模式。

如何确保 Web 上显示的数据始终是投票程序保存的最新数据?它会在浏览器中自动重新加载吗?这些是否应该进一步隔离?

如果您没有在应用程序中实现某种形式的缓存,则会为每个请求呈现模板,因此它应该始终获取当前数据。另一方面,如果您希望浏览器内的页面在新数据到达时自动更新,无需用户交互,您可以使用 Javascript 和长轮询来实现。在这里很难给出具体的建议,因为不清楚你到底想做什么。

【讨论】:

  • 我让应用程序使用 uwsgi 和 nginx 运行。你说的uWSGI服务主管是皇帝吗?
【解决方案2】:

你在cron运行的程序,如果你经常想要更新的结果,你也可以在linuxscreen运行它。在您的本地计算机上,您正在 Flask 附带的开发服务器中运行您的 Web 应用程序。你不能在你的 vps 中使用它。我推荐uwsgi+nginx

【讨论】:

  • 我听从了你的建议,实现了 uwsgi 和 nginx
  • 太棒了。可能现在你可以accept the answer
猜你喜欢
  • 2018-09-10
  • 2021-06-17
  • 2016-05-13
  • 1970-01-01
  • 2014-03-03
  • 2016-02-03
  • 2020-08-16
  • 1970-01-01
  • 2020-11-19
相关资源
最近更新 更多