Ich möchte eine "lange läuft" - Aufgabe (dauert etwa 0,5 Sekunden) in einem Thread in einem Sinatra-Webserver.Wie zähle ich laufende Threads in Ruby Server
Die Web-Reaktion dauert etwa 20 ms, also wenn ich voll werden, dann werden Themen anhäufen ...
So dass ich dachte, dass ich es tun würde, wenn ich synchronisieren beschäftigt bekommen ..
if (running_thread_count > 10)
stuff_that_takes_a_second()
else
Thread.new do
stuff_that_takes_a_second()
end
end
Wie erhalten Sie die Anzahl der laufenden Threads (Ich möchte die Anzahl der Threads gestartet und noch nicht fertig ausgeführt) - Wie code Sie running_thread_count?
def running_thread_count
return Thread.list.count
end
Oder muss ich nach Threads suchen, die ausgeführt werden? Wenn ein Thread fertig ist, hört er dann auf, in der Thread.list zurück zu kommen?
Ich möchte nicht Join aufrufen, da dies den Zweck besiegen würde - die Rückkehr schnell ist, es sei denn, wir sind mit vielen Threads arbeiten gesichert.
Aber ohne 'join', alle Fäden beendet, wenn einer von ihnen die Ausführung beendet haben Dies gibt. 'Thread.list.count' erhält die Anzahl der aktuell laufenden Threads. 'Thread' hat eine Methode mit dem Namen' status', die '' sleep '' oder ''run'' für Threads im Prozess zurückgibt. Ich habe den Code als Antwort hinzugefügt. – Kashyap
Ich dachte, dass ein Ruby-Programm, das als Webserver läuft, die ganze Zeit läuft, so dass ein Thread, der während einer Web-Anfrage gestartet wurde, bis zum Ende läuft. –
Sie haben da einen Punkt. Wird mehr experimentieren. Vielen Dank – Kashyap