ractor-pool 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.buildkite/pipeline.yml +1 -0
- data/CHANGELOG.md +4 -0
- data/lib/ractor-pool/version.rb +1 -1
- data/lib/ractor-pool.rb +26 -21
- data/sig/generated/ractor-pool.rbs +5 -5
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 13aa15dab296025cc8fa8348a4477bd8afd2db09b24ea4e13c43a17cca976cd2
|
|
4
|
+
data.tar.gz: b99432e86a0e93b69aa84867b869a0502469b402a297698599175442987cc23f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8f85b3c281484b9daf22e6e0fe2c195ca4a5a67640e3913d70f93cd109c022e3138cbae924477de09e2400c552b9b4c19eb386cf9b5b3479ec6bf60e382cbb4d
|
|
7
|
+
data.tar.gz: 6101a788de91cbe8f681cfa3c3c05556154061f0f96910e2474c1b083b5c283455d2ee1c525d30f8e73785148ad6392dbf1464f578cdb8b07670718b911bfba5
|
data/.buildkite/pipeline.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/lib/ractor-pool/version.rb
CHANGED
data/lib/ractor-pool.rb
CHANGED
|
@@ -35,7 +35,7 @@ Warning.ignore(/Ractor API is experimental/, __FILE__)
|
|
|
35
35
|
#
|
|
36
36
|
# p counter.value #=> 10
|
|
37
37
|
#
|
|
38
|
-
# @see https://docs.ruby-lang.org/en/master/ractor_md.html Ractor Guide
|
|
38
|
+
# @see https://docs.ruby-lang.org/en/master/language/ractor_md.html Ractor Guide
|
|
39
39
|
# @see https://docs.ruby-lang.org/en/master/Ractor.html Ractor API
|
|
40
40
|
# @see https://docs.ruby-lang.org/en/master/Ractor/Port.html Ractor::Port API
|
|
41
41
|
# @see https://github.com/joshuay03/atomic-ruby atomic-ruby gem
|
|
@@ -62,8 +62,8 @@ class RactorPool
|
|
|
62
62
|
# @rbs @error_port: Ractor::Port?
|
|
63
63
|
# @rbs @coordinator: Ractor?
|
|
64
64
|
# @rbs @workers: Array[Ractor]
|
|
65
|
-
# @rbs @error_collector: Thread?
|
|
66
65
|
# @rbs @collector: Thread?
|
|
66
|
+
# @rbs @error_collector: Thread?
|
|
67
67
|
|
|
68
68
|
# Creates a new RactorPool with the specified number of workers.
|
|
69
69
|
#
|
|
@@ -107,8 +107,8 @@ class RactorPool
|
|
|
107
107
|
@error_port = Ractor::Port.new unless on_error
|
|
108
108
|
@coordinator = start_coordinator if size > 1
|
|
109
109
|
@workers = start_workers
|
|
110
|
-
@error_collector = start_error_collector
|
|
111
110
|
@collector = start_collector
|
|
111
|
+
@error_collector = start_error_collector
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
# Queues a work item to be processed by an available worker.
|
|
@@ -170,10 +170,15 @@ class RactorPool
|
|
|
170
170
|
|
|
171
171
|
Thread.pass until @in_flight.value.zero?
|
|
172
172
|
|
|
173
|
-
@coordinator
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
173
|
+
if @coordinator
|
|
174
|
+
@coordinator.send(SHUTDOWN, move: true)
|
|
175
|
+
@workers.each(&:join)
|
|
176
|
+
@coordinator.join
|
|
177
|
+
else
|
|
178
|
+
@workers.first.send(SHUTDOWN, move: true)
|
|
179
|
+
@workers.each(&:join)
|
|
180
|
+
@result_port&.send(SHUTDOWN, move: true)
|
|
181
|
+
end
|
|
177
182
|
@error_port&.send(SHUTDOWN, move: true)
|
|
178
183
|
@error_collector&.join
|
|
179
184
|
@collector&.join
|
|
@@ -261,39 +266,39 @@ class RactorPool
|
|
|
261
266
|
end
|
|
262
267
|
|
|
263
268
|
# @rbs () -> Thread?
|
|
264
|
-
def
|
|
265
|
-
return
|
|
269
|
+
def start_collector
|
|
270
|
+
return unless @result_handler
|
|
266
271
|
|
|
267
|
-
thread_name = String.new("#{self.class.name}
|
|
272
|
+
thread_name = String.new("#{self.class.name} collector thread")
|
|
268
273
|
thread_name << " for #{@name}" if @name
|
|
269
274
|
|
|
270
|
-
Thread.new(@
|
|
275
|
+
Thread.new(@result_port, @result_handler, thread_name) do |result_port, result_handler, name|
|
|
271
276
|
Thread.current.name = name
|
|
272
277
|
|
|
273
278
|
loop do
|
|
274
|
-
|
|
275
|
-
break if
|
|
279
|
+
result = result_port.receive
|
|
280
|
+
break if result == SHUTDOWN
|
|
276
281
|
|
|
277
|
-
|
|
282
|
+
result_handler.call(result)
|
|
278
283
|
end
|
|
279
284
|
end
|
|
280
285
|
end
|
|
281
286
|
|
|
282
287
|
# @rbs () -> Thread?
|
|
283
|
-
def
|
|
284
|
-
return
|
|
288
|
+
def start_error_collector
|
|
289
|
+
return if @on_error
|
|
285
290
|
|
|
286
|
-
thread_name = String.new("#{self.class.name} collector thread")
|
|
291
|
+
thread_name = String.new("#{self.class.name} error collector thread")
|
|
287
292
|
thread_name << " for #{@name}" if @name
|
|
288
293
|
|
|
289
|
-
Thread.new(@
|
|
294
|
+
Thread.new(@error_port, thread_name) do |error_port, name|
|
|
290
295
|
Thread.current.name = name
|
|
291
296
|
|
|
292
297
|
loop do
|
|
293
|
-
|
|
294
|
-
break if
|
|
298
|
+
message = error_port.receive
|
|
299
|
+
break if message == SHUTDOWN
|
|
295
300
|
|
|
296
|
-
|
|
301
|
+
warn message
|
|
297
302
|
end
|
|
298
303
|
end
|
|
299
304
|
end
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
#
|
|
30
30
|
# p counter.value #=> 10
|
|
31
31
|
#
|
|
32
|
-
# @see https://docs.ruby-lang.org/en/master/ractor_md.html Ractor Guide
|
|
32
|
+
# @see https://docs.ruby-lang.org/en/master/language/ractor_md.html Ractor Guide
|
|
33
33
|
# @see https://docs.ruby-lang.org/en/master/Ractor.html Ractor API
|
|
34
34
|
# @see https://docs.ruby-lang.org/en/master/Ractor/Port.html Ractor::Port API
|
|
35
35
|
# @see https://github.com/joshuay03/atomic-ruby atomic-ruby gem
|
|
@@ -44,10 +44,10 @@ class RactorPool
|
|
|
44
44
|
|
|
45
45
|
SHUTDOWN: ::Symbol
|
|
46
46
|
|
|
47
|
-
@collector: Thread?
|
|
48
|
-
|
|
49
47
|
@error_collector: Thread?
|
|
50
48
|
|
|
49
|
+
@collector: Thread?
|
|
50
|
+
|
|
51
51
|
@workers: Array[Ractor]
|
|
52
52
|
|
|
53
53
|
@coordinator: Ractor?
|
|
@@ -137,8 +137,8 @@ class RactorPool
|
|
|
137
137
|
def start_workers: () -> Array[Ractor]
|
|
138
138
|
|
|
139
139
|
# @rbs () -> Thread?
|
|
140
|
-
def
|
|
140
|
+
def start_collector: () -> Thread?
|
|
141
141
|
|
|
142
142
|
# @rbs () -> Thread?
|
|
143
|
-
def
|
|
143
|
+
def start_error_collector: () -> Thread?
|
|
144
144
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ractor-pool
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Joshua Young
|
|
@@ -73,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
74
|
version: '0'
|
|
75
75
|
requirements: []
|
|
76
|
-
rubygems_version: 4.0.
|
|
76
|
+
rubygems_version: 4.0.10
|
|
77
77
|
specification_version: 4
|
|
78
78
|
summary: A thread-safe, lock-free pool of Ractor workers with a coordinator pattern
|
|
79
79
|
for distributing work
|