有没有办法查看队列中还有多少(甚至检查每个作业?)作业?

最佳答案

在深入研究source code之后,我发现了以下内容:

ActiveJob::QueueAdapters::AsyncAdapter 使用Concurrent Ruby线程池来调度和执行作业。

在配置中初始化适配器时,您传递了执行程序选项,而该选项恰好是的initialize方法的参数。
Concurrent::ThreadPoolExecutor 类。

创建的 Concurrent::ThreadPoolExecutor 类的实例具有以下方法,例如:

  • queue_length -队列中等待执行的任务数。
  • scheduled_task_count -自构建以来已计划在池上执行的任务数。

  • 话虽如此,我认为应该遵循以下几点为您做一些事情:
    ActiveJob::Base
      .queue_adapter
      .instance_variable_get(:@scheduler)
      .instance_variable_get(:@async_executor)
      .public_send(:queue_length)
    

    上面执行以下操作:
  • 获取您的适配器
  • 获得其instance_variable @scheduler ,它指向
  • Concurrent::ThreadPoolExecutor
  • 实例(Scheduler类的实例变量- @async_executor )
  • 可以实际在上面调用方法的
  • (queue_lengthscheduled_task_countothers)

  • 尽管我没有对其进行测试,但是请务必仔细检查是否有错别字或其他内容。

    关于ruby-on-rails - 使用ActiveJob AsyncAdapter列出排队的任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40032266/

    10-11 20:09