【问题标题】:Handling long running tasks处理长时间运行的任务
【发布时间】:2012-02-20 04:35:58
【问题描述】:

我有一个网络应用程序,它有一个长时间运行的任务 - 生成 PDF 报告。生成各种图表,总共需要大约 15 秒的时间来处理。该报告由用户生成。

在请求时处理报告目前会导致流程被占用,更重要的是(鉴于本网站的使用量并不大)有时请求会超时。

因此,我正在重新设计应用程序这一部分的架构(Rails 2.3.8)。将这一点放在上下文中,每天生成的这些报告不太可能超过几个,这是一个非常小众的应用程序,因此显着的进一步扩展并不是主要问题。不过我确实打算在将来交出这个项目,所以稳定性是。

我认为最明显的解决方案是使用Spawn 生成报告,并在完成后通过电子邮件向用户发送下载链接。我研究过的另一个解决方案是DelayedJob

做过类似事情的人可以推荐一种方法而不是另一种方法吗?

【问题讨论】:

    标签: ruby-on-rails delayed-job spawn


    【解决方案1】:

    delayed_job,或其他一些排队机制将是最容易设置的东西。使用delayed_job,您只需将您的工作人员加入队列而不是创建PDF,并且服务器上的后台进程将从队列中进行任何可用的工作。使用 spawn 来分叉你的整个过程似乎有点笨拙,并且似乎不适合其他次要但仍然运行时间更长的任务(如发送电子邮件)。

    【讨论】:

    • 是的,我想我想知道另一个优势是否可能是当前同步完成的其他任务(例如忘记密码的电子邮件)但有时可能需要一段时间才能排队使用相同的机制。我想缺点是有一个后台进程一直在运行,而不是在需要时分叉该进程。反过来说,在任何情况下,是否有人会建议使用 Spawn 分叉一个进程?
    猜你喜欢
    • 2012-04-10
    • 2021-09-11
    • 2011-01-19
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多