【问题标题】:Communicate with backend job from web server or web page从 Web 服务器或网页与后端作业通信
【发布时间】:2009-10-01 15:42:48
【问题描述】:

我有一个运行 linux 的“设备”(由于缺乏更好的描述)。

目前我通过 ssh 进入该框以启动作业。这对我的用户来说不够友好,所以我正在组合一个简单的 Web UI 来启动脚本。一个作业的运行时间从 10 秒到几个小时不等。 Web UI 需要反映作业的状态。

过去,我通过在服务器上运行一个守护程序来解决类似的问题,该守护程序监视假脱机目录(或数据库表)以获取新的作业请求,生成一个进程,监视该进程,并为 Web UI 提供信息数据库表或状态文件。然后,Web UI 将作业请求放入假脱机目录 (db),并偶尔检查状态文件 (db)。对于这项任务来说,这可能有点过头了。

对于当前任务,我正在考虑从 cgi 生成作业,并偶尔检查作业在进程或退出时写入的状态文件。

我的问题:有没有更好的(更简单/更快编写/更健壮)的方法来做到这一点?是否有我应该了解的现有模式或工具?

(Python 解决方案是理想的。)

谢谢。

【问题讨论】:

    标签: python linux backend


    【解决方案1】:

    我在许多项目中都这样做。一个 web 应用程序(主要是 Python/CGI),它生成一个单独的 python 脚本(使用子进程),它立即daemonizes itself 来完成工作。然后,Web 应用程序继续发出 AJAX 请求以检查守护进程进程(我使用简单的 txt 文件进行通信,数据库可能会更好)。一个不错的方法是让守护程序在完成后向最终用户发送电子邮件(带有检索结果的链接)。这样,用户可以在那些需要数小时的工作上关闭他们的网络浏览器。

    【讨论】:

    • 马克,感谢有关 python-daemon 的提示。这支持 2.6 还是仅支持 3.x?
    • 我刚刚在 2.5 下成功安装并运行了所有测试。如果您想要一个更简单的解决方案(回头看这是我正在使用的),这是一个独立的代码 sn-p:code.activestate.com/recipes/278731
    • 甜蜜。这个 python-daemon 对我来说也是新闻 - 现在我看到它我注意到我有一些东西正在运行,但我做错了......
    【解决方案2】:

    我不确定我是否正确理解了您的问题,但我假设您有多个可以同时运行的“作业”并希望它们在网页上显示它们是否完整?

    当启动作业时,网页(例如 python 和 mod_wsgi)会启动一个 python 脚本,该脚本会将作业输入到,比如说 sqlite 数据库并运行作业,一旦作业完成,脚本会更新条目作业,以便将其标记为完成

    状态页面只会显示来自 sqlite 的内容。

    除了工作 ID 和可能的开始/结束时间之外,您想要放入数据库的内容取决于您希望在工作状态网页上显示的内容

    附带说明 - 如果“工作”是汇编,请见 Hudson

    【讨论】:

    • 作业不能同时运行,它们不是编译。 (我过去解决的“类似问题”类似于哈德逊。)该设备正在控制外部设备。感谢您的回答,这基本上是我以前做过的。
    猜你喜欢
    • 2011-07-13
    • 2016-10-04
    • 2011-04-28
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多