有没有办法可以查看队列中剩余的作业数量(甚至检查每个作业)?
有没有办法可以查看队列中剩余的作业数量(甚至检查每个作业)?
经过一番研究 源代码 ,我发现:
ActiveJob::QueueAdapters::AsyncAdapter
使用Concurrent Ruby线程池来调度和执行任务。
在你的配置中初始化适配器时,你需要传递执行器选项,这些选项实际上是Concurrent::ThreadPoolExecutor
类的initialize
方法的参数。
创建Concurrent::ThreadPoolExecutor
类的实例后,它具有以下方法:
queue_length
- 队列中等待执行的任务数量。scheduled_task_count
- 自构建以来已安排在池上执行的任务数量。也就是说,我认为类似这样的内容应该能满足您的需求:
ActiveJob::Base
.queue_adapter
.instance_variable_get(:@scheduler)
.instance_variable_get(:@async_executor)
.public_send(:queue_length)
@scheduler
的指针,该指针指向 Concurrent::ThreadPoolExecutor
的实例(Scheduler
类的实例变量 - @async_executor
)queue_length
、scheduled_task_count
和 others)虽然我没有测试过,请确保仔细检查是否有错别字或其他问题。
queue_length
、scheduled_task_count
、completed_task_count
。它们总是返回 0
。 - mario199