我正在开发的 Web 应用程序需要执行在 http 请求/响应周期中执行时间过长的任务。通常,用户将执行请求,服务器将接受此请求,除其他外,运行一些脚本以生成数据(例如,使用 povray 渲染图像)。
当然,这些任务可能需要很长时间,因此在将响应发送给客户端之前,服务器不应该挂起等待脚本完成执行。因此,我需要异步执行脚本,并给客户端一个“资源在这里,但尚未准备好”,并可能告诉它一个 ajax 端点进行轮询,以便它可以在准备好时检索和显示资源。
现在,我的问题与设计无关(尽管我也非常喜欢这方面的任何提示)。我的问题是:解决这个问题的系统是否已经存在,所以我不重新发明方轮?如果必须,我会使用进程队列管理器来提交任务并放置一个 HTTP 端点来输出状态,比如“待定”、“中止”、“完成”给 ajax 客户端,但如果已经有类似的东西专门为这项任务而存在,我最喜欢它。
我在 python+django 工作。
编辑:请注意这里的主要问题不是服务器和客户端必须如何协商和交换有关任务状态的信息。
问题是服务器如何处理非常长的任务的提交和排队。换句话说,我需要一个比让我的服务器在LSF上提交脚本更好的系统。不是说不行,而是我觉得有点过分了……
编辑2:我添加了一个赏金,看看我是否能得到其他答案。我检查了 pyprocessing,但我无法提交作业并在稍后阶段重新连接到队列。