concurrent_worker 0.3.1 → 0.3.2
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/Gemfile.lock +1 -1
- data/lib/concurrent_worker/version.rb +1 -1
- data/lib/concurrent_worker.rb +66 -44
- 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: 3cca5e7fa079b2ca384298714ace4deb0eab604e6b46c35d2c045a7598eccdec
|
4
|
+
data.tar.gz: 8d6bc370412e62652e61abe7d40720d87b8bfa83037edab3d60fe80f090e49fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbef59386d3374cc696d3aa4e84f03cadf70a8247e50c52d1eb6eb8e7cdc0987da150a5db2587ccc24caac141b9883863ac141f16a23a6e6b69837d3b94d5d40
|
7
|
+
data.tar.gz: d511c9ffb9bf463f3635980a370da1647c103dea03ebc002c653ab3653a374bd37745d4496fbd4b10e08a19fac64d50604799386515cd6c3ce3ea108f5645103
|
data/Gemfile.lock
CHANGED
data/lib/concurrent_worker.rb
CHANGED
@@ -87,6 +87,8 @@ module ConcurrentWorker
|
|
87
87
|
|
88
88
|
@snd_queue_max = @options[:snd_queue_max] || 2
|
89
89
|
@req_counter = RequestCounter.new
|
90
|
+
@options[ :result_callback_interrupt ] ||= :immediate
|
91
|
+
@options[ :retired_callback_interrupt ] ||= :immediate
|
90
92
|
|
91
93
|
case @options[:type]
|
92
94
|
when :process
|
@@ -113,10 +115,14 @@ module ConcurrentWorker
|
|
113
115
|
end
|
114
116
|
|
115
117
|
def call_result_callbacks(args)
|
116
|
-
|
117
|
-
|
118
|
+
Thread.handle_interrupt(Object => :never) do
|
119
|
+
Thread.handle_interrupt(Object => @options[ :result_callback_interrupt ] ) do
|
120
|
+
@result_callbacks.each do |callback|
|
121
|
+
callback.call(*args)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
@req_counter.pop
|
118
125
|
end
|
119
|
-
@req_counter.pop
|
120
126
|
end
|
121
127
|
|
122
128
|
def add_retired_callback(&callback)
|
@@ -128,8 +134,10 @@ module ConcurrentWorker
|
|
128
134
|
end
|
129
135
|
|
130
136
|
def call_retired_callbacks
|
131
|
-
|
132
|
-
callback
|
137
|
+
Thread.handle_interrupt(Object => @options[ :retired_callback_interrupt ] ) do
|
138
|
+
@retired_callbacks.each do |callback|
|
139
|
+
callback.call
|
140
|
+
end
|
133
141
|
end
|
134
142
|
end
|
135
143
|
|
@@ -216,12 +224,16 @@ module ConcurrentWorker
|
|
216
224
|
def cncr_block
|
217
225
|
@thread_channel = Queue.new
|
218
226
|
@thread = Thread.new do
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
227
|
+
Thread.handle_interrupt(Object => :never) do
|
228
|
+
begin
|
229
|
+
Thread.handle_interrupt(Object => :immediate) do
|
230
|
+
yield_base_block
|
231
|
+
end
|
232
|
+
ensure
|
233
|
+
@req_counter.close
|
234
|
+
@thread_channel.close
|
235
|
+
call_retired_callbacks
|
236
|
+
end
|
225
237
|
end
|
226
238
|
end
|
227
239
|
end
|
@@ -260,19 +272,23 @@ module ConcurrentWorker
|
|
260
272
|
|
261
273
|
def send(obj)
|
262
274
|
begin
|
263
|
-
|
264
|
-
|
265
|
-
|
275
|
+
Thread.handle_interrupt(Object => :never) do
|
276
|
+
data = Marshal.dump(obj)
|
277
|
+
@wio.write([data.size].pack("I"))
|
278
|
+
@wio.write(data)
|
279
|
+
end
|
266
280
|
rescue Errno::EPIPE
|
267
281
|
end
|
268
282
|
end
|
269
283
|
|
270
284
|
def recv
|
271
285
|
begin
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
286
|
+
Thread.handle_interrupt(Object => :on_blocking) do
|
287
|
+
szdata = @rio.read(4)
|
288
|
+
return [] if szdata.nil?
|
289
|
+
size = szdata.unpack("I")[0]
|
290
|
+
Marshal.load(@rio.read(size))
|
291
|
+
end
|
276
292
|
rescue IOError
|
277
293
|
raise StopIteration
|
278
294
|
end
|
@@ -285,21 +301,25 @@ module ConcurrentWorker
|
|
285
301
|
|
286
302
|
def set_rcv_thread
|
287
303
|
Thread.new do
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
304
|
+
Thread.handle_interrupt(Object => :never) do
|
305
|
+
begin
|
306
|
+
Thread.handle_interrupt(Object => :immediate) do
|
307
|
+
loop do
|
308
|
+
result = @ipc_channel.recv
|
309
|
+
break if result == :worker_loop_finished
|
310
|
+
raise result if result.kind_of?(Exception)
|
311
|
+
|
312
|
+
call_result_callbacks(result)
|
313
|
+
end
|
314
|
+
end
|
315
|
+
rescue
|
316
|
+
Thread.pass
|
317
|
+
raise $!
|
318
|
+
ensure
|
319
|
+
@req_counter.close
|
320
|
+
@ipc_channel.close
|
321
|
+
call_retired_callbacks
|
295
322
|
end
|
296
|
-
rescue
|
297
|
-
Thread.pass
|
298
|
-
raise $!
|
299
|
-
ensure
|
300
|
-
@req_counter.close
|
301
|
-
@ipc_channel.close
|
302
|
-
call_retired_callbacks
|
303
323
|
end
|
304
324
|
end
|
305
325
|
end
|
@@ -418,23 +438,25 @@ module ConcurrentWorker
|
|
418
438
|
|
419
439
|
|
420
440
|
def deploy_worker
|
421
|
-
defined?(@work_block) || @work_block = nil
|
422
|
-
|
441
|
+
defined?(@work_block) || @work_block = nil
|
442
|
+
worker_options = {
|
443
|
+
type: @options[:type],
|
444
|
+
snd_queue_max: @snd_queue_max,
|
445
|
+
result_callback_interrupt: :never,
|
446
|
+
retired_callback_interrupt: :never
|
447
|
+
}
|
448
|
+
w = Worker.new(*@args, worker_options, &@work_block)
|
423
449
|
w.add_callback do |*arg|
|
424
|
-
|
425
|
-
|
426
|
-
@ready_queue.push(w)
|
427
|
-
end
|
450
|
+
@rcv_queue.push(arg)
|
451
|
+
@ready_queue.push(w)
|
428
452
|
end
|
429
453
|
|
430
454
|
w.add_retired_callback do
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
@snd_queue.push(req)
|
435
|
-
end
|
436
|
-
@ready_queue.push(w)
|
455
|
+
w.req_counter.rest.each do
|
456
|
+
|req|
|
457
|
+
@snd_queue.push(req)
|
437
458
|
end
|
459
|
+
@ready_queue.push(w)
|
438
460
|
end
|
439
461
|
|
440
462
|
@set_blocks.each do |symbol, block|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: concurrent_worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dddogdiamond
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-05-
|
11
|
+
date: 2019-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|