Module: Async::Container

Defined in:
lib/async/container.rb,
lib/async/container/best.rb,
lib/async/container/error.rb,
lib/async/container/group.rb,
lib/async/container/keyed.rb,
lib/async/container/forked.rb,
lib/async/container/hybrid.rb,
lib/async/container/notify.rb,
lib/async/container/channel.rb,
lib/async/container/generic.rb,
lib/async/container/version.rb,
lib/async/container/threaded.rb,
lib/async/container/controller.rb,
lib/async/container/notify/log.rb,
lib/async/container/statistics.rb,
lib/async/container/notify/pipe.rb,
lib/async/container/notify/client.rb,
lib/async/container/notify/server.rb,
lib/async/container/notify/socket.rb,
lib/async/container/notify/console.rb

Defined Under Namespace

Modules: Notify Classes: Channel, Controller, Error, Forked, Generic, Group, Hybrid, Keyed, Kill, Restart, SetupError, Statistics, Terminate, Threaded

Constant Summary collapse

Interrupt =
::Interrupt
INTERRUPT_TIMEOUT =

The default timeout for interrupting processes, before escalating to terminating.

ENV.fetch("ASYNC_CONTAINER_INTERRUPT_TIMEOUT", 10).to_f
TERMINATE_TIMEOUT =

The default timeout for terminating processes, before escalating to killing.

ENV.fetch("ASYNC_CONTAINER_TERMINATE_TIMEOUT", 10).to_f
ASYNC_CONTAINER_PROCESSOR_COUNT =

An environment variable key to override processor_count.

"ASYNC_CONTAINER_PROCESSOR_COUNT"
VERSION =
"0.27.7"

Class Method Summary collapse

Class Method Details

.best_container_classObject

Determins the best container class based on the underlying Ruby implementation. Some platforms, including JRuby, don’t support fork. Applications which just want a reasonable default can use this method.



21
22
23
24
25
26
27
# File 'lib/async/container/best.rb', line 21

def self.best_container_class
	if fork?
		return Forked
	else
		return Threaded
	end
end

.fork?Boolean

Whether the underlying process supports fork.

Returns:

  • (Boolean)


14
15
16
# File 'lib/async/container/best.rb', line 14

def self.fork?
	::Process.respond_to?(:fork) && ::Process.respond_to?(:setpgid)
end

.new(*arguments, **options) ⇒ Object

Create an instance of the best container class.



31
32
33
# File 'lib/async/container/best.rb', line 31

def self.new(*arguments, **options)
	best_container_class.new(*arguments, **options)
end

.processor_count(env = ENV) ⇒ Object

The processor count which may be used for the default number of container threads/processes. You can override the value provided by the system by specifying the ‘ASYNC_CONTAINER_PROCESSOR_COUNT` environment variable.



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/async/container/generic.rb', line 22

def self.processor_count(env = ENV)
	count = env.fetch(ASYNC_CONTAINER_PROCESSOR_COUNT) do
		Etc.nprocessors rescue 1
	end.to_i
	
	if count < 1
		raise RuntimeError, "Invalid processor count #{count}!"
	end
	
	return count
end