gpt4 book ai didi

ajax - 异步执行 Web 应用程序的任务

转载 作者:行者123 更新时间:2023-12-01 10:15:02 26 4
gpt4 key购买 nike

我正在开发的 Web 应用程序需要执行的任务太长,无法在 http 请求/响应周期内执行。通常,用户将执行请求,服务器将接受该请求,并运行一些脚本以生成数据(例如,使用 povray 渲染图像)。

当然,这些任务可能需要很长时间,所以服务器不应该在将响应发送给客户端之前挂起脚本以完成执行。因此,我需要异步执行脚本,并给客户端一个“资源在这里,但还没有准备好”,并可能告诉它一个要轮询的 ajax 端点,这样它就可以在准备好时检索和显示资源。

现在,我的问题与设计无关(尽管我也非常喜欢这方面的任何提示)。我的问题是:解决这个问题的系统是否已经存在,所以我不会重新发明方轮?如果必须的话,我会使用进程队列管理器来提交任务,并放置一个 HTTP 端点来向 ajax 客户端发出状态,例如“待定”、“中止”、“完成”,但如果已经有类似的东西专门为这项任务而存在,我会非常喜欢它。

我在 python+django 工作。

编辑:请注意这里的主要问题不是服务器和客户端必须如何协商和交换有关任务状态的信息。

问题在于服务器如何处理超长任务的提交和入队。换句话说,我需要一个比让我的服务器在 LSF 上提交脚本更好的系统。 .不是说不行,就是觉得有点过分了……

编辑 2:我添加了赏金以查看是否可以获得其他答案。我检查了 pyprocessing,但我无法执行作业提交并在稍后阶段重新连接到队列。

最佳答案

你应该避免在这里重新发明轮子。

查看 gearman .它有很多语言(包括 python)的库并且相当流行。不确定是否有人有任何开箱即用的方法可以轻松地将 django 连接到 gearman 和 ajax 调用,但是你自己做这部分应该不会太复杂。

基本思想是您运行 gearman 作业服务器(或多个作业服务器),让您的 Web 请求使用一些参数(例如“{photo_id: 1234}”)排队一个作业(例如“resize_photo”)。您将其列为后台任务。你得到一个句柄。然后,您的 ajax 请求将轮询该句柄值,直到它被标记为完成。

然后你有一个 worker(或者可能有很多),它是一个独立的 python 进程,连接到这个作业服务器并为“resize_photo”作业注册自己,完成工作,然后将其标记为完成。

我也找到了这个blog post这很好地总结了它的用法。

关于ajax - 异步执行 Web 应用程序的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1748413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com