class Hybrid
Provides a hybrid multi-process multi-thread container.
Definitions
def run(count: nil, forks: nil, threads: nil, **options, &block)
Run multiple instances of the same block in the container.
Signature
-
parameter
count
Integer
The number of instances to start.
-
parameter
forks
Integer
The number of processes to fork.
-
parameter
threads
Integer
the number of threads to start.
Implementation
def run(count: nil, forks: nil, threads: nil, **options, &block)
processor_count = Container.processor_count
count ||= processor_count ** 2
forks ||= [processor_count, count].min
threads ||= (count / forks).ceil
forks.times do
self.spawn(**options) do |instance|
container = Threaded.new
container.run(count: threads, **options, &block)
container.wait_until_ready
instance.ready!
container.wait
rescue Async::Container::Terminate
# Stop it immediately:
container.stop(false)
ensure
# Stop it gracefully (also code path for Interrupt):
container.stop
end
end
return self
end