加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 是否可以使用Ruby Threading终止已经运行的

发布时间:2020-12-17 03:20:03 所属栏目:百科 来源:网络整理
导读:假设我在后台运行了delayed_job.任务可以安排或立即运行(有些是长期任务,有些则不是) 如果任务太长,用户应该可以取消它.延迟工作有可能吗?我检查了文档,似乎无法找到终止方法或其他东西.它们只提供一个捕获来取消延迟的作业本身(因此取消所有任务……我只需
假设我在后台运行了delayed_job.任务可以安排或立即运行(有些是长期任务,有些则不是)

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

UPDATE
我的老板(谁是一个伟大的程序员顺便说一句)建议使用Ruby Threading来实现我们的这个功能.这可能吗?就像为每个任务创建新线程并在其运行时杀死该线程一样?

就像是:

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

然后停止它我只会使用t1.stop(?)再次不知道

这可能吗?谢谢!

解决方法

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

>首先,我们有一个具有def执行功能的Job模型! (它运行它应该做的).
>接下来,我们在后台有delayed_job工作者,正在寻找新的工作.现在,当您创建作业时,可以将其安排为立即运行或每隔一天运行(我们使用rufus)
>创建作业时,它会检查它是否应立即运行.如果是,则将其自身添加到延迟的作业队列中. execute函数创建一个Thread,因此每个作业都有自己的线程.
> ui中的用户可以查看作业是否正在运行(如果有一个started_at且没有finished_at).如果它正在运行,则有一个取消它的按钮.取消它只是将作业的delayed_at设置为Time.now.
>当作业正在运行时,它还会检查自己是否有cancel_at或者Time.now是否> finished_at.如果是这样,杀死线程.

瞧!我们为一项工作测试了它,它似乎工作.现在唯一的问题是缩放……

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读