Quiero hacer una tarea de 'larga ejecución' (lleva unos 0.5 segundos para ejecutar) en una secuencia en un servidor web Sinatra.Cómo contar hilos en ejecución en el servidor de ruby
La respuesta web tarda unos 20 ms, por lo que si me da ocupado entonces las discusiones se acumulan ...
así que pensé que lo haría si me lo sincroniza ocupada ..
if (running_thread_count > 10)
stuff_that_takes_a_second()
else
Thread.new do
stuff_that_takes_a_second()
end
end
¿Cómo se obtiene el número de subprocesos en ejecución (quiero que el número de subprocesos se inicien y no se ejecuten aún)? ¿Cómo se codifica running_thread_count?
def running_thread_count
return Thread.list.count
end
¿Debo verificar si hay hilos en ejecución? es decir, cuando un hilo termina de ejecutarse, ¿dejará de volver a aparecer en Thread.list?
No quiero llamar a join porque eso sería contrario al objetivo, que es volver rápidamente a menos que tengamos una copia de seguridad con muchos hilos trabajando.
Pero sin 'join', todos los hilos de salida si uno de ellos termina su ejecución. 'Thread.list.count' obtiene el número de hilos que se están ejecutando actualmente. 'Thread' tiene un método llamado' status' que devuelve '" sleep "' o '" run "' para hilos en proceso. He agregado el código como respuesta. – Kashyap
Pensé que un programa de rubí que se ejecutaba como servidor web se mantenía en funcionamiento todo el tiempo, de modo que un hilo iniciado durante una solicitud web se ejecutara hasta su finalización. –
Tienes un punto ahí. Experimentará más. Gracias – Kashyap