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 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