2017-08-31 3 views
0

Wie kann ich die aktuelle Menge an offenen Fasern in einer ruby Anwendung erhalten? Meine App verwendet EventMachine Synchrony lib für die Parallelitätsbehandlung. Beim Googlen habe ich keine API gefunden, die es zurückgeben würde.Menge an offenen Fasern in Rubin erhalten

Zum Beispiel, wenn ich dieses Stück Code haben:

EM::Synchrony::FiberIterator.new(@outputs, @outputs.size).each do |output| 
# some code goes here 
end 

wie kann ich dann wissen, wie viele Fasern dort läuft? Ohne manuelle Verwendung counter++ und natürlich ohne @some_arr.size.

Antwort

0

Ok, also 1-Lösung wurde für dieses Problem gefunden:

Sie können Anzahl der vorhandenen Objekte zählen (aller Art) in Ruby.

In unserem Fall wollen wir die Objekte vom Typ/Klasse 'Fiber' zählen, so verwenden wir ObjectSpace.each_object Rubin API:

stats = {} 
stats["Fiber"] = 0 
ObjectSpace.each_object(Fiber) {|o| stats["Fiber"] += 1 if o.alive?} 

(wir interessieren uns nur für lebendig Fibers, deshalb alive? mit API)

Objectspace Referenz: https://ruby-doc.org/core-1.9.3/ObjectSpace.html

Fiber als Referenz: https://ruby-doc.org/core-1.9.3/Fiber.html