Apakah ada cara agar saya dapat melihat berapa banyak (bahkan mungkin memeriksa setiap pekerjaan?) pekerjaan yang tersisa dalam antrian?
Buat daftar tugas yang diantrekan dengan ActiveJob AsyncAdapter
comment
hai, beri tahu saya apakah saran di bawah ini berhasil untuk Anda jika Anda sudah mencobanya - Saya agak penasaran tetapi belum punya waktu untuk mengujinya :) (mungkin selama akhir pekan)
- person Andrey Deineko   schedule 14.10.2016
comment
Sama di sini :) Tidak dapat mengujinya hari ini. Biarkan saya melihat apakah saya bisa melakukannya besok pagi;)
- person alexandernst   schedule 14.10.2016
Jawaban (1)
Setelah menggali lebih dalam kode sumber inilah yang saya temukan:
ActiveJob::QueueAdapters::AsyncAdapter
menggunakan kumpulan thread Ruby serentak untuk menjadwalkan dan melaksanakan pekerjaan.
Saat Anda menginisialisasi adaptor dalam konfigurasi Anda, Anda meneruskan opsi eksekutor, yang kemudian menjadi argumen ke metode initialize
dari Concurrent::ThreadPoolExecutor
.
Instance kelas Concurrent::ThreadPoolExecutor
yang dibuat memiliki metode seperti:
queue_length
- Jumlah tugas di antrian menunggu eksekusi.scheduled_task_count
- Jumlah tugas yang dimiliki telah dijadwalkan untuk dieksekusi di kolam sejak konstruksi.
Oleh karena itu, menurut saya sesuatu seperti ini akan bermanfaat bagi Anda:
ActiveJob::Base
.queue_adapter
.instance_variable_get(:@scheduler)
.instance_variable_get(:@async_executor)
.public_send(:queue_length)
Di atas melakukan hal berikut:
- ambil adaptor Anda
- dapatkan instance_variable
@scheduler
, itu menunjuk ke - contoh
Concurrent::ThreadPoolExecutor
(variabel contoh kelasScheduler
-@async_executor
) - di mana Anda sebenarnya dapat memanggil metode yang dijelaskan di atas (
queue_length
,scheduled_task_count
dan lainnya)
Meskipun saya tidak mengujinya, jadi pastikan untuk memeriksa ulang apakah ada kesalahan ketik atau apa pun.
person
Andrey Deineko
schedule
13.10.2016
Oke, saya baru saja mencoba. Tampaknya tidak berhasil. Ia selalu mengembalikan 0.
- person alexandernst; 14.10.2016
@alexandernst pikirkanlah, ia mengembalikan bilangan bulat, jadi saya cukup yakin itu berfungsi dalam arti tertentu, ia memanggil metode yang benar. Apakah Anda mencoba metode lain? Juga, apakah Anda 1000% yakin, itu tidak akan menghasilkan 0?
- person Andrey Deineko; 15.10.2016
Saya mencoba solusi ini. Saya mencoba
queue_length
, scheduled_task_count
, completed_task_count
. Semuanya selalu kembali 0
- person mario199; 26.11.2018
Mendapatkan async_executor adaptor akan mengembalikan instance Concurrent::ThreadPoolExecutor. Masalahnya adalah jumlah Concurrent::ThreadPoolExecutor tidak diperbarui karena beberapa alasan.
- person robertoplancarte; 08.06.2020