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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b87c721ec0afe8f8cc7a63e2f966b15f3ec7ee3afe7b9bca92318efb4b21f6db
4
- data.tar.gz: b04acf17b575e0f0b2b0b00bc0ae93c2c05714fb472bf2ea184b651061974380
3
+ metadata.gz: 3cca5e7fa079b2ca384298714ace4deb0eab604e6b46c35d2c045a7598eccdec
4
+ data.tar.gz: 8d6bc370412e62652e61abe7d40720d87b8bfa83037edab3d60fe80f090e49fb
5
5
  SHA512:
6
- metadata.gz: 67caefcf14850a02e930b4379976d80c6616cf1d7232b5296bf51653897e3034e401d1cca12b5606f74f43d2abd5fbfef6a504a83c10c91047aa9167529c53cc
7
- data.tar.gz: d41da169a6d9d419fc0b15973d551881d4535fcd308b0920a5e4c45289b0444d7ce277918a86396ed89c8c381713bc3f72fbad1b136a8a3a9510c275acc58581
6
+ metadata.gz: cbef59386d3374cc696d3aa4e84f03cadf70a8247e50c52d1eb6eb8e7cdc0987da150a5db2587ccc24caac141b9883863ac141f16a23a6e6b69837d3b94d5d40
7
+ data.tar.gz: d511c9ffb9bf463f3635980a370da1647c103dea03ebc002c653ab3653a374bd37745d4496fbd4b10e08a19fac64d50604799386515cd6c3ce3ea108f5645103
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- concurrent_worker (0.3.1)
4
+ concurrent_worker (0.3.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,3 +1,3 @@
1
1
  module ConcurrentWorker
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
@@ -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
- @result_callbacks.each do |callback|
117
- callback.call(*args)
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
- @retired_callbacks.each do |callback|
132
- callback.call
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
- begin
220
- yield_base_block
221
- ensure
222
- @req_counter.close
223
- @thread_channel.close
224
- call_retired_callbacks
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
- data = Marshal.dump(obj)
264
- @wio.write([data.size].pack("I"))
265
- @wio.write(data)
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
- szdata = @rio.read(4)
273
- return [] if szdata.nil?
274
- size = szdata.unpack("I")[0]
275
- Marshal.load(@rio.read(size))
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
- begin
289
- loop do
290
- result = @ipc_channel.recv
291
- break if result == :worker_loop_finished
292
- raise result if result.kind_of?(Exception)
293
-
294
- call_result_callbacks(result)
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
- w = Worker.new(*@args, type: @options[:type], snd_queue_max: @snd_queue_max, &@work_block)
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
- Thread.handle_interrupt(Object => :never) do
425
- @rcv_queue.push(arg)
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
- Thread.handle_interrupt(Object => :never) do
432
- w.req_counter.rest.each do
433
- |req|
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.1
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-09 00:00:00.000000000 Z
11
+ date: 2019-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler