我有几个预定的工作运行如下:
MyWorker.perform_at(3.hours.from_now, 'mike', 1)
Run Code Online (Sandbox Code Playgroud)
我想知道,如果以后再说一小时后,我觉得我想要取消这份工作,我该怎么做呢?
DRo*_*son 16
我最近编写了一些代码来处理这个问题,它可以在我的sidekiq-status gem的分支中找到.你可以在这里查看或使用它:https: //github.com/Robinson7D/sidekiq-status
(当前,你必须使用它作为git:gemfile中的信息,直到项目的主叉实现这一点)
要使用它,首先要存储job_identifier:
job_identifier = MyWorker.perform_at(3.hours.from_now, 'mike', 1)
Run Code Online (Sandbox Code Playgroud)
当你想要销毁它时,你可以调用Sidekiq :: Status.cancel方法:
Sidekiq::Status.cancel job_identifier
Run Code Online (Sandbox Code Playgroud)
编辑:自写这篇文章以来,我的代码被接受到Sidekiq :: Status的主叉 - https://github.com/utgarda/sidekiq-status.你不再需要使用我的前叉了.在Utgarda的分叉上你会通过调用unchedule来触发它,而不是取消:
Sidekiq::Status.unschedule job_identifier
Run Code Online (Sandbox Code Playgroud)
此外:您还可以使用标准的Sidekiq gem删除作业,如下所述:https://github.com/mperham/sidekiq/wiki/API(尽管对于他们的方法,您需要安排作业时间的unix-timestamp -你不能只用作业的id删除;如果你想删除没有时间戳的作业,Sidekiq :: Status方法可能适合你).
但是,Sidekiq::ScheduledSet.new().delete(unix_timestamp, jid)如果你想删除一个作业,我会推荐一些类似于wiki的方法,而不是它们在wiki中列出的方式.)
据我所知,Sidekiq 目前无法取消计划作业。我编写了一项服务,可以让我因此取消预定的邮件。但是使用 redis 命令可以相当轻松地取消作业:
你会得到这样的时间表工作:
schedules_jobs = $redis.zrange "schedule", 0, -1, {withscores: true}
Run Code Online (Sandbox Code Playgroud)
然后你会得到一系列工作,你选择一个工作并取消它,如下所示:
$redis.zrem "schedule", schedules_jobs[0]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6002 次 |
| 最近记录: |