concurrent_worker 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|