gpt4 book ai didi

ruby-on-rails-3 - 是否可以使用 Ruby 线程终止已经运行的延迟作业?

转载 作者:行者123 更新时间:2023-12-04 18:51:29 24 4
gpt4 key购买 nike

假设我在后台运行了 delay_job。任务可以被安排或立即运行(有些是长任务有些不是)

如果任务太长,用户应该能够取消它。延迟工作可以吗?我检查了文档,似乎找不到终止方法或其他东西。他们只提供一个捕获来取消延迟的工作本身(从而取消所有任务......我只需要取消某个正在运行的任务)

更新
我的老板(顺便说一句,他是一位出色的程序员)建议将 Ruby 线程用于我们的此功能。这可能吗?喜欢为每个任务创建新线程并在它运行时杀死该线程?

就像是:

t1 = Thread.new(task.run)
self.delay.t1.join (?) -- still reading on threads so correct me if im wrong

然后停止它,我将再次使用 t1.stop (?) 还不知道

这可能吗?谢谢!

最佳答案

看来我的老板恰到好处,所以这就是我们所做的(请告诉我们是否有可能这是不好的做法,所以我可以提出来):

  • 首先,我们有一个具有 def execute 的 Job 模型! (它运行它应该做的事情)。
  • 接下来,我们有 延迟作业 worker 在后台,监听新工作。现在,当您创建作业时,您可以将其安排为立即运行或每隔一天运行(我们使用 rufus)
  • 创建作业时,它会检查它是否应该立即运行。如果是,它会将自己添加到延迟作业队列中。 execute 函数创建一个线程,因此每个作业都有自己的线程。
  • 用户界面中的用户可以查看作业是否正在运行(如果有开始的_at 和没有完成的_at)。如果它正在运行,有一个按钮可以取消它。取消它只会将作业的 cancelled_at 设置为 Time.now。
  • 当作业正在运行时,它还会检查自己是否有 cancel_at 或 Time.now是 > finished_at .如果是这样,杀死线程。

  • 瞧!我们已经为一项工作测试了它,它似乎有效。现在唯一的问题是缩放...

    如果您发现任何问题,请在评论中提出,或者如果有的话,请提供更多建议:) 我希望这对某些人也有帮助!

    关于ruby-on-rails-3 - 是否可以使用 Ruby 线程终止已经运行的延迟作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5565882/

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