Tôi muốn thực hiện tác vụ 'chạy dài' - (mất khoảng 0,5 giây để thực thi) trong một luồng trong máy chủ web Sinatra.Cách đếm chủ đề đang chạy trong máy chủ ruby
Câu trả lời web mất khoảng 20 ms, vì vậy nếu tôi nhận được bận rộn sau đó chủ đề sẽ chồng chất lên ...
Vì vậy, tôi đã suy nghĩ rằng tôi sẽ làm điều đó đồng bộ nếu tôi nhận được bận rộn ..
if (running_thread_count > 10)
stuff_that_takes_a_second()
else
Thread.new do
stuff_that_takes_a_second()
end
end
Làm thế nào để bạn nhận được số lượng các chủ đề đang chạy (Tôi muốn số lượng các luồng được khởi chạy, và chưa thực hiện chạy) - làm thế nào để bạn mã running_thread_count?
def running_thread_count
return Thread.list.count
end
Hoặc tôi có cần kiểm tra các chủ đề đang chạy không? tức là khi một luồng được chạy xong, nó có dừng lại trong Thread.list không?
Tôi không muốn gọi tham gia vì điều đó sẽ đánh bại mục đích - đó là để trả lại nhanh chóng trừ khi chúng tôi được sao lưu với nhiều chuỗi hoạt động.
Nhưng nếu không có 'join', tất cả các chủ đề thoát nếu một trong số họ hoàn thành thực hiện. 'Thread.list.count' lấy số lượng các luồng đang chạy. 'Thread' có một phương thức gọi là' status' trả về '" sleep "' hoặc '" run "' cho các luồng đang được xử lý. Tôi đã thêm mã làm câu trả lời. – Kashyap
Tôi nghĩ rằng một chương trình ruby chạy như một máy chủ web liên tục chạy mọi lúc, để một chuỗi bắt đầu trong một yêu cầu web sẽ chạy đến khi hoàn thành? –
Bạn có một điểm ở đó. Sẽ thử nghiệm nhiều hơn. Cảm ơn bạn – Kashyap