List queued tasks with ActiveJob AsyncAdapter

夙愿已清 提交于 2019-12-01 22:03:38

问题


Is there a way I can see how many (maybe even inspect each job?) jobs are there remaining in the queue?


回答1:


After some digging into source code here is what I found out:

ActiveJob::QueueAdapters::AsyncAdapter uses a Concurrent Ruby thread pool to schedule and execute jobs.

When you initialize the adapter in your configuration, you pass executor options, which in turn happen to be arguments to initialize method of Concurrent::ThreadPoolExecutor class.

Created instance of Concurrent::ThreadPoolExecutor class has such methods, as:

  • queue_length - The number of tasks in the queue awaiting execution.
  • scheduled_task_count - The number of tasks that have been scheduled for execution on the pool since construction.

That said, I think something along these lines should do it for you:

ActiveJob::Base
  .queue_adapter
  .instance_variable_get(:@scheduler)
  .instance_variable_get(:@async_executor)
  .public_send(:queue_length)

Above does the following:

  1. get your adapter
  2. get its instance_variable @scheduler, that points to
  3. instance of Concurrent::ThreadPoolExecutor (instance variable of Scheduler class - @async_executor)
  4. on which you can actually call the methods, described above (queue_length, scheduled_task_count and others)

Though I did not test it, so make sure to double check for typos or whatsoever.



来源:https://stackoverflow.com/questions/40032266/list-queued-tasks-with-activejob-asyncadapter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!