2016-10-13 18 views
1

有沒有一種方法可以查看多少(甚至可能檢查每個作業?)作業是否還在隊列中?使用ActiveJob列出排隊的任務AsyncAdapter

+0

嘿,讓我知道下面的建議是否爲你工作,如果你已經嘗試過了 - 我很好奇,但還沒有片刻測試它:)(可能在週末) –

+0

同樣在這裏:) Couldn今天不測試。讓我看看我明天早上能不能明白;) – alexandernst

回答

1

經過一番挖掘到source code這裏是我發現:

ActiveJob::QueueAdapters::AsyncAdapter使用Concurrent Ruby線程池來調度和執行工作。

當你初始化配置適配器,您通過執行選項,這反過來又碰巧是參數 Concurrent::ThreadPoolExecutorinitialize方法。 Concurrent::ThreadPoolExecutor類的

創建的實例具有這樣的方法,如:

這麼說,我覺得這些方針的東西應該爲你做:

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

上述聲明如下:

  1. 讓你的適配器
  2. 獲得其instance_variable @scheduler,那指向
  3. Concurrent::ThreadPoolExecutor的實例(的實例變量類 - @async_executor
  4. 上,你實際上可以調用的方法,上述(queue_lengthscheduled_task_countothers

雖然我沒有測試它描述的,所以一定要仔細檢查拼寫錯誤或任何責任。

+0

好吧,我剛試過。它似乎沒有工作。它總是返回0。 – alexandernst

+0

@alexandernst認爲它,它返回一個整數,因此我敢肯定它在某種意義上工作,它調用正確的方法。你嘗試過其他方法嗎?另外,你是否確定,它不應該返回0? –