มีวิธีที่ฉันสามารถดูได้ว่ามีงานเหลืออยู่ในคิวกี่งาน (อาจจะตรวจสอบแต่ละงานด้วยซ้ำ)
แสดงรายการงานที่เข้าคิวด้วย ActiveJob AsyncAdapter
comment
สวัสดี โปรดแจ้งให้เราทราบว่าคำแนะนำด้านล่างใช้ได้ผลหรือไม่หากคุณลองแล้ว - ฉันค่อนข้างสงสัยแต่ยังไม่มีเวลาทดสอบ :) (อาจเป็นช่วงสุดสัปดาห์)
- person Andrey Deineko   schedule 14.10.2016
comment
เหมือนกันที่นี่ :) ไม่สามารถทดสอบได้ในวันนี้ มาดูกันว่าพรุ่งนี้เช้าจะได้ไปหรือเปล่า ;)
- person alexandernst   schedule 14.10.2016
คำตอบ (1)
หลังจากเจาะลึกเข้าไปใน ซอร์สโค้ด นี่คือสิ่งที่ฉันพบ:
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_length
,scheduled_task_count
และ อื่นๆ)
แม้ว่าฉันจะไม่ได้ทดสอบ ดังนั้นอย่าลืมตรวจสอบการพิมพ์ผิดหรืออะไรก็ตามอีกครั้ง
person
Andrey Deineko
schedule
13.10.2016
โอเค ฉันแค่พยายาม ดูเหมือนจะไม่ทำงาน มันจะคืนค่า 0 เสมอ
- person alexandernst; 14.10.2016
@alexandernst ลองคิดดูว่ามันจะคืนค่าจำนวนเต็ม ดังนั้นฉันค่อนข้างแน่ใจว่ามันใช้งานได้ในแง่หนึ่งว่ามันเรียกวิธีการที่ถูกต้อง คุณลองวิธีอื่นแล้วหรือยัง? นอกจากนี้คุณแน่ใจ 1,000% ว่าไม่ควรส่งคืน 0 หรือไม่
- person Andrey Deineko; 15.10.2016
ฉันลองวิธีแก้ปัญหานี้ ฉันพยายาม
queue_length
, scheduled_task_count
, completed_task_count
พวกเขาทั้งหมดกลับมาเสมอ 0
- person mario199; 26.11.2018
การรับ async_executor ของอะแดปเตอร์กำลังส่งคืนอินสแตนซ์ Concurrent::ThreadPoolExecutor ปัญหาคือจำนวน Concurrent::ThreadPoolExecutor ไม่ได้รับการอัพเดตด้วยเหตุผลบางประการ
- person robertoplancarte; 08.06.2020