Class: Async::Container::Threaded::Child::Instance

Inherits:
Notify::Pipe show all
Defined in:
lib/async/container/threaded.rb

Overview

Represents a running child thread from the point of view of the child thread.

Constant Summary

Constants inherited from Notify::Pipe

Notify::Pipe::NOTIFY_PIPE

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Notify::Pipe

#before_spawn, open!, #send

Methods inherited from Notify::Client

#error!, #ready!, #reloading!, #restarting!, #status!, #stopping!

Constructor Details

#initialize(io) ⇒ Instance

Initialize the child thread instance.



55
56
57
58
59
# File 'lib/async/container/threaded.rb', line 55

def initialize(io)
	@thread = ::Thread.current
	
	super
end

Class Method Details

.for(thread) ⇒ Object

Wrap an instance around the Thread instance from within the threaded child.



46
47
48
49
50
# File 'lib/async/container/threaded.rb', line 46

def self.for(thread)
	instance = self.new(thread.out)
	
	return instance
end

Instance Method Details

#as_jsonObject

Generate a hash representation of the thread.



64
65
66
67
68
69
70
# File 'lib/async/container/threaded.rb', line 64

def as_json(...)
	{
		process_id: ::Process.pid,
		thread_id: @thread.object_id,
		name: @thread.name,
	}
end

#exec(*arguments, ready: true, **options) ⇒ Object

Execute a child process using Process.spawn. In order to simulate Process.exec, an Exit instance is raised to propagage exit status. This creates the illusion that this method does not return (normally).



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/async/container/threaded.rb', line 93

def exec(*arguments, ready: true, **options)
	if ready
		self.ready!(status: "(spawn)")
	else
		self.before_spawn(arguments, options)
	end
	
	begin
		pid = ::Process.spawn(*arguments, **options)
	ensure
		_, status = ::Process.wait2(pid)
		
		raise Exit, status
	end
end

#nameObject

Get the name of the thread.



87
88
89
# File 'lib/async/container/threaded.rb', line 87

def name
	@thread.name
end

#name=(value) ⇒ Object

Set the name of the thread.



81
82
83
# File 'lib/async/container/threaded.rb', line 81

def name= value
	@thread.name = value
end

#to_jsonObject

Generate a JSON representation of the thread.



75
76
77
# File 'lib/async/container/threaded.rb', line 75

def to_json(...)
	as_json.to_json(...)
end