From b6dd12d5815869926435ecce0aac24dfb0e81cda Mon Sep 17 00:00:00 2001 From: Petr Blaho Date: Sun, 6 Oct 2019 17:09:35 +0200 Subject: [PATCH 1/6] Adds WrappingExecutor class This can be used for wrapping args and task before passing it to Executor. --- lib/concurrent/executor/wrapping_executor.rb | 33 +++++++++++++ lib/concurrent/executors.rb | 1 + .../executor/wrapping_executor_spec.rb | 48 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 lib/concurrent/executor/wrapping_executor.rb create mode 100644 spec/concurrent/executor/wrapping_executor_spec.rb diff --git a/lib/concurrent/executor/wrapping_executor.rb b/lib/concurrent/executor/wrapping_executor.rb new file mode 100644 index 000000000..c146b9a68 --- /dev/null +++ b/lib/concurrent/executor/wrapping_executor.rb @@ -0,0 +1,33 @@ +module Concurrent + + # Used for wrapping an Executor with Wrapper which can modify arguments or task passed to Executor + class WrappingExecutor < Synchronization::Object + safe_initialization! + + include ExecutorService + + # @param [Executor] executor Executor to be wrapped + # @yield [*args, &task] Wrapper block which wraps the task with args before it is passed to the Executor + # @yieldparam [Array] *args Wrapper block will get these from {WrappingExecutor#post} call + # @yieldparam [block] &task Wrapper block will get this from {WrappingExecutor#post} call + # @yieldreturn [Array] args and task on the last place. + def initialize(executor, &wrapper) + super() + @Wrapper = wrapper + @Executor = executor + end + + def post(*args, &task) + *args, task = @Wrapper.call(*args, &task) + @Executor.post(*args, &task) + end + + def can_overflow? + @Executor.can_overflow? + end + + def serialized? + @Executor.serialized? + end + end +end diff --git a/lib/concurrent/executors.rb b/lib/concurrent/executors.rb index eb1972ce6..e5829ad75 100644 --- a/lib/concurrent/executors.rb +++ b/lib/concurrent/executors.rb @@ -18,3 +18,4 @@ require 'concurrent/executor/single_thread_executor' require 'concurrent/executor/thread_pool_executor' require 'concurrent/executor/timer_set' +require 'concurrent/executor/wrapping_executor' diff --git a/spec/concurrent/executor/wrapping_executor_spec.rb b/spec/concurrent/executor/wrapping_executor_spec.rb new file mode 100644 index 000000000..9d0e920a7 --- /dev/null +++ b/spec/concurrent/executor/wrapping_executor_spec.rb @@ -0,0 +1,48 @@ +module Concurrent + RSpec.describe WrappingExecutor do + + let(:wrapping_executor) { WrappingExecutor.new(executor, &wrapper) } + let(:executor) { Concurrent.global_fast_executor } + let(:wrapper) { nil } + let(:args) { { foo: 'bar', baz: 42 } } + let(:task) { -> (*args) { return nil } } + + subject { wrapping_executor } + + it { is_expected.to be_kind_of(WrappingExecutor) } + it { is_expected.to respond_to(:post) } + it { is_expected.to respond_to(:can_overflow?) } + it { is_expected.to respond_to(:serialized?) } + + describe '#post' do + context 'with passthrough wrapper' do + let(:wrapper) { -> (*args, &task) { return *args, task } } + + it { + expect(executor).to receive(:post).with(args) { |&block| expect(block).to be(task) } + wrapping_executor.post(args, &task) + } + end + + context 'with wrapper modifying args' do + let(:wrapper) { -> (*args, &task) { return *args, { xyz: 'abc' }, task } } + + it { + expect(executor).to receive(:post).with(args, { xyz: 'abc' }) { |&block| expect(block).to be(task) } + wrapping_executor.post(args, &task) + } + end + + context 'with wrapper modifying task' do + let(:wrapper) { -> (*args, &task) { return *args, another_task } } + let(:another_task) { -> (*args) { return true } } + + it { + expect(executor).to receive(:post).with(args) { |&block| expect(block).to be(another_task) } + wrapping_executor.post(args, &task) + } + end + + end + end +end From 0d4da5ef9531edf4f548d50f7f6c153684c70f84 Mon Sep 17 00:00:00 2001 From: Petr Blaho Date: Sun, 6 Oct 2019 17:10:18 +0200 Subject: [PATCH 2/6] Generates docs for WrappingExecutor --- docs/master/Concurrent.html | 20 +- .../Concurrent/Synchronization/Object.html | 2 +- docs/master/Concurrent/WrappingExecutor.html | 528 ++++ docs/master/_index.html | 7 + docs/master/class_list.html | 2 +- docs/master/method_list.html | 2180 +++++++++-------- 6 files changed, 1653 insertions(+), 1086 deletions(-) create mode 100644 docs/master/Concurrent/WrappingExecutor.html diff --git a/docs/master/Concurrent.html b/docs/master/Concurrent.html index e943d3e5d..04eadb9f0 100644 --- a/docs/master/Concurrent.html +++ b/docs/master/Concurrent.html @@ -79,7 +79,7 @@
Defined in:
lib/concurrent.rb,
- lib/concurrent/map.rb,
lib/concurrent/set.rb,
lib/concurrent/atom.rb,
lib/concurrent/hash.rb,
lib/concurrent/ivar.rb,
lib/concurrent/mvar.rb,
lib/concurrent/tvar.rb,
lib/concurrent/agent.rb,
lib/concurrent/array.rb,
lib/concurrent/async.rb,
lib/concurrent/delay.rb,
lib/concurrent/maybe.rb,
lib/concurrent/tuple.rb,
lib/concurrent/errors.rb,
lib/concurrent/future.rb,
lib/concurrent/options.rb,
lib/concurrent/promise.rb,
lib/concurrent/version.rb,
lib/concurrent/dataflow.rb,
lib/concurrent/promises.rb,
lib/concurrent/constants.rb,
lib/concurrent/exchanger.rb,
lib/concurrent/re_include.rb,
lib/concurrent/timer_task.rb,
lib/concurrent/atomic/event.rb,
lib/concurrent/configuration.rb,
lib/concurrent/mutable_struct.rb,
lib/concurrent/scheduled_task.rb,
lib/concurrent/utility/engine.rb,
lib/concurrent/concern/logging.rb,
lib/concurrent/settable_struct.rb,
lib/concurrent/synchronization.rb,
lib/concurrent/utility/at_exit.rb,
lib/concurrent/atomic/semaphore.rb,
lib/concurrent/immutable_struct.rb,
lib/concurrent/thread_safe/util.rb,
lib/concurrent/concern/obligation.rb,
lib/concurrent/concern/observable.rb,
lib/concurrent/executor/timer_set.rb,
lib/concurrent/concern/deprecation.rb,
lib/concurrent/atomic/atomic_fixnum.rb,
lib/concurrent/synchronization/lock.rb,
lib/concurrent/atomic/atomic_boolean.rb,
lib/concurrent/atomic/cyclic_barrier.rb,
lib/concurrent/atomic/mutex_semaphore.rb,
lib/concurrent/atomic/read_write_lock.rb,
lib/concurrent/synchronization/object.rb,
lib/concurrent/thread_safe/util/adder.rb,
lib/concurrent/utility/monotonic_time.rb,
lib/concurrent/utility/native_integer.rb,
lib/concurrent/atomic/atomic_reference.rb,
lib/concurrent/atomic/count_down_latch.rb,
lib/concurrent/atomic/thread_local_var.rb,
lib/concurrent/concern/dereferenceable.rb,
lib/concurrent/synchronization/volatile.rb,
lib/concurrent/executor/executor_service.rb,
lib/concurrent/synchronization/condition.rb,
lib/concurrent/thread_safe/util/volatile.rb,
lib/concurrent/utility/processor_counter.rb,
lib/concurrent/atomic/mutex_atomic_fixnum.rb,
lib/concurrent/collection/lock_free_stack.rb,
lib/concurrent/executor/fixed_thread_pool.rb,
lib/concurrent/synchronization/mri_object.rb,
lib/concurrent/synchronization/rbx_object.rb,
lib/concurrent/thread_safe/util/striped64.rb,
lib/concurrent/atomic/mutex_atomic_boolean.rb,
lib/concurrent/executor/cached_thread_pool.rb,
lib/concurrent/executor/immediate_executor.rb,
lib/concurrent/executor/safe_task_executor.rb,
lib/concurrent/atomic/java_count_down_latch.rb,
lib/concurrent/atomic/java_thread_local_var.rb,
lib/concurrent/atomic/ruby_thread_local_var.rb,
lib/concurrent/synchronization/jruby_object.rb,
lib/concurrent/atomic/mutex_count_down_latch.rb,
lib/concurrent/atomic_reference/mutex_atomic.rb,
lib/concurrent/executor/serialized_execution.rb,
lib/concurrent/executor/thread_pool_executor.rb,
lib/concurrent/collection/map/mri_map_backend.rb,
lib/concurrent/executor/java_executor_service.rb,
lib/concurrent/executor/ruby_executor_service.rb,
lib/concurrent/executor/single_thread_executor.rb,
lib/concurrent/synchronization/abstract_object.rb,
lib/concurrent/synchronization/abstract_struct.rb,
lib/concurrent/synchronization/lockable_object.rb,
lib/concurrent/thread_safe/util/cheap_lockable.rb,
lib/concurrent/utility/native_extension_loader.rb,
lib/concurrent/atomic/abstract_thread_local_var.rb,
lib/concurrent/atomic/atomic_markable_reference.rb,
lib/concurrent/atomic/reentrant_read_write_lock.rb,
lib/concurrent/executor/serial_executor_service.rb,
lib/concurrent/executor/simple_executor_service.rb,
lib/concurrent/thread_safe/util/data_structures.rb,
lib/concurrent/thread_safe/util/xor_shift_random.rb,
lib/concurrent/executor/abstract_executor_service.rb,
lib/concurrent/executor/java_thread_pool_executor.rb,
lib/concurrent/executor/ruby_thread_pool_executor.rb,
lib/concurrent/synchronization/truffleruby_object.rb,
lib/concurrent/thread_safe/synchronized_delegator.rb,
lib/concurrent/synchronization/rbx_lockable_object.rb,
lib/concurrent/thread_safe/util/power_of_two_tuple.rb,
lib/concurrent/atomic_reference/numeric_cas_wrapper.rb,
lib/concurrent/executor/indirect_immediate_executor.rb,
lib/concurrent/executor/java_single_thread_executor.rb,
lib/concurrent/executor/ruby_single_thread_executor.rb,
lib/concurrent/collection/copy_on_write_observer_set.rb,
lib/concurrent/synchronization/jruby_lockable_object.rb,
lib/concurrent/synchronization/mutex_lockable_object.rb,
lib/concurrent/collection/copy_on_notify_observer_set.rb,
lib/concurrent/collection/map/synchronized_map_backend.rb,
lib/concurrent/executor/serialized_execution_delegator.rb,
lib/concurrent/collection/non_concurrent_priority_queue.rb,
lib/concurrent/synchronization/abstract_lockable_object.rb,
lib/concurrent/collection/map/non_concurrent_map_backend.rb,
lib/concurrent/collection/map/atomic_reference_map_backend.rb,
lib/concurrent/collection/java_non_concurrent_priority_queue.rb,
lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb,
lib-edge/concurrent/edge.rb,
lib-edge/concurrent/actor.rb,
lib-edge/concurrent/channel.rb,
lib-edge/concurrent/actor/core.rb,
lib-edge/concurrent/actor/root.rb,
lib-edge/concurrent/actor/utils.rb,
lib-edge/concurrent/actor/errors.rb,
lib-edge/concurrent/channel/tick.rb,
lib-edge/concurrent/edge/channel.rb,
lib-edge/concurrent/edge/version.rb,
lib-edge/concurrent/actor/context.rb,
lib-edge/concurrent/edge/promises.rb,
lib-edge/concurrent/edge/throttle.rb,
lib-edge/concurrent/lazy_register.rb,
lib-edge/concurrent/actor/envelope.rb,
lib-edge/concurrent/actor/behaviour.rb,
lib-edge/concurrent/actor/reference.rb,
lib-edge/concurrent/actor/type_check.rb,
lib-edge/concurrent/actor/utils/pool.rb,
lib-edge/concurrent/channel/selector.rb,
lib-edge/concurrent/edge/cancellation.rb,
lib-edge/concurrent/edge/erlang_actor.rb,
lib-edge/concurrent/actor/utils/ad_hoc.rb,
lib-edge/concurrent/channel/buffer/base.rb,
lib-edge/concurrent/actor/utils/balancer.rb,
lib-edge/concurrent/channel/buffer/timer.rb,
lib-edge/concurrent/edge/lock_free_queue.rb,
lib-edge/concurrent/actor/utils/broadcast.rb,
lib-edge/concurrent/channel/buffer/ticker.rb,
lib-edge/concurrent/edge/processing_actor.rb,
lib-edge/concurrent/actor/behaviour/awaits.rb,
lib-edge/concurrent/actor/behaviour/buffer.rb,
lib-edge/concurrent/channel/buffer/sliding.rb,
lib-edge/concurrent/actor/behaviour/linking.rb,
lib-edge/concurrent/actor/behaviour/pausing.rb,
lib-edge/concurrent/channel/buffer/buffered.rb,
lib-edge/concurrent/channel/buffer/dropping.rb,
lib-edge/concurrent/actor/behaviour/abstract.rb,
lib-edge/concurrent/actor/public_delegations.rb,
lib-edge/concurrent/channel/buffer/unbuffered.rb,
lib-edge/concurrent/edge/lock_free_linked_set.rb,
lib-edge/concurrent/actor/internal_delegations.rb,
lib-edge/concurrent/actor/behaviour/supervising.rb,
lib-edge/concurrent/actor/behaviour/termination.rb,
lib-edge/concurrent/channel/selector/put_clause.rb,
lib-edge/concurrent/actor/behaviour/sets_results.rb,
lib-edge/concurrent/channel/selector/take_clause.rb,
lib-edge/concurrent/edge/old_channel_integration.rb,
lib-edge/concurrent/actor/behaviour/removes_child.rb,
lib-edge/concurrent/channel/selector/after_clause.rb,
lib-edge/concurrent/channel/selector/error_clause.rb,
lib-edge/concurrent/edge/lock_free_linked_set/node.rb,
lib-edge/concurrent/channel/selector/default_clause.rb,
lib-edge/concurrent/actor/behaviour/executes_context.rb,
lib-edge/concurrent/edge/lock_free_linked_set/window.rb,
lib-edge/concurrent/actor/default_dead_letter_handler.rb,
lib-edge/concurrent/actor/behaviour/errors_on_unknown_message.rb
+ lib/concurrent/map.rb,
lib/concurrent/set.rb,
lib/concurrent/atom.rb,
lib/concurrent/hash.rb,
lib/concurrent/ivar.rb,
lib/concurrent/mvar.rb,
lib/concurrent/tvar.rb,
lib/concurrent/agent.rb,
lib/concurrent/array.rb,
lib/concurrent/async.rb,
lib/concurrent/delay.rb,
lib/concurrent/maybe.rb,
lib/concurrent/tuple.rb,
lib/concurrent/errors.rb,
lib/concurrent/future.rb,
lib/concurrent/options.rb,
lib/concurrent/promise.rb,
lib/concurrent/version.rb,
lib/concurrent/dataflow.rb,
lib/concurrent/promises.rb,
lib/concurrent/constants.rb,
lib/concurrent/exchanger.rb,
lib/concurrent/re_include.rb,
lib/concurrent/timer_task.rb,
lib/concurrent/atomic/event.rb,
lib/concurrent/configuration.rb,
lib/concurrent/mutable_struct.rb,
lib/concurrent/scheduled_task.rb,
lib/concurrent/utility/engine.rb,
lib/concurrent/concern/logging.rb,
lib/concurrent/settable_struct.rb,
lib/concurrent/synchronization.rb,
lib/concurrent/utility/at_exit.rb,
lib/concurrent/atomic/semaphore.rb,
lib/concurrent/immutable_struct.rb,
lib/concurrent/thread_safe/util.rb,
lib/concurrent/concern/obligation.rb,
lib/concurrent/concern/observable.rb,
lib/concurrent/executor/timer_set.rb,
lib/concurrent/concern/deprecation.rb,
lib/concurrent/atomic/atomic_fixnum.rb,
lib/concurrent/synchronization/lock.rb,
lib/concurrent/atomic/atomic_boolean.rb,
lib/concurrent/atomic/cyclic_barrier.rb,
lib/concurrent/atomic/mutex_semaphore.rb,
lib/concurrent/atomic/read_write_lock.rb,
lib/concurrent/synchronization/object.rb,
lib/concurrent/thread_safe/util/adder.rb,
lib/concurrent/utility/monotonic_time.rb,
lib/concurrent/utility/native_integer.rb,
lib/concurrent/atomic/atomic_reference.rb,
lib/concurrent/atomic/count_down_latch.rb,
lib/concurrent/atomic/thread_local_var.rb,
lib/concurrent/concern/dereferenceable.rb,
lib/concurrent/synchronization/volatile.rb,
lib/concurrent/executor/executor_service.rb,
lib/concurrent/synchronization/condition.rb,
lib/concurrent/thread_safe/util/volatile.rb,
lib/concurrent/utility/processor_counter.rb,
lib/concurrent/atomic/mutex_atomic_fixnum.rb,
lib/concurrent/collection/lock_free_stack.rb,
lib/concurrent/executor/fixed_thread_pool.rb,
lib/concurrent/executor/wrapping_executor.rb,
lib/concurrent/synchronization/mri_object.rb,
lib/concurrent/synchronization/rbx_object.rb,
lib/concurrent/thread_safe/util/striped64.rb,
lib/concurrent/atomic/mutex_atomic_boolean.rb,
lib/concurrent/executor/cached_thread_pool.rb,
lib/concurrent/executor/immediate_executor.rb,
lib/concurrent/executor/safe_task_executor.rb,
lib/concurrent/atomic/java_count_down_latch.rb,
lib/concurrent/atomic/java_thread_local_var.rb,
lib/concurrent/atomic/ruby_thread_local_var.rb,
lib/concurrent/synchronization/jruby_object.rb,
lib/concurrent/atomic/mutex_count_down_latch.rb,
lib/concurrent/atomic_reference/mutex_atomic.rb,
lib/concurrent/executor/serialized_execution.rb,
lib/concurrent/executor/thread_pool_executor.rb,
lib/concurrent/collection/map/mri_map_backend.rb,
lib/concurrent/executor/java_executor_service.rb,
lib/concurrent/executor/ruby_executor_service.rb,
lib/concurrent/executor/single_thread_executor.rb,
lib/concurrent/synchronization/abstract_object.rb,
lib/concurrent/synchronization/abstract_struct.rb,
lib/concurrent/synchronization/lockable_object.rb,
lib/concurrent/thread_safe/util/cheap_lockable.rb,
lib/concurrent/utility/native_extension_loader.rb,
lib/concurrent/atomic/abstract_thread_local_var.rb,
lib/concurrent/atomic/atomic_markable_reference.rb,
lib/concurrent/atomic/reentrant_read_write_lock.rb,
lib/concurrent/executor/serial_executor_service.rb,
lib/concurrent/executor/simple_executor_service.rb,
lib/concurrent/thread_safe/util/data_structures.rb,
lib/concurrent/thread_safe/util/xor_shift_random.rb,
lib/concurrent/executor/abstract_executor_service.rb,
lib/concurrent/executor/java_thread_pool_executor.rb,
lib/concurrent/executor/ruby_thread_pool_executor.rb,
lib/concurrent/synchronization/truffleruby_object.rb,
lib/concurrent/thread_safe/synchronized_delegator.rb,
lib/concurrent/synchronization/rbx_lockable_object.rb,
lib/concurrent/thread_safe/util/power_of_two_tuple.rb,
lib/concurrent/atomic_reference/numeric_cas_wrapper.rb,
lib/concurrent/executor/indirect_immediate_executor.rb,
lib/concurrent/executor/java_single_thread_executor.rb,
lib/concurrent/executor/ruby_single_thread_executor.rb,
lib/concurrent/collection/copy_on_write_observer_set.rb,
lib/concurrent/synchronization/jruby_lockable_object.rb,
lib/concurrent/synchronization/mutex_lockable_object.rb,
lib/concurrent/collection/copy_on_notify_observer_set.rb,
lib/concurrent/collection/map/synchronized_map_backend.rb,
lib/concurrent/executor/serialized_execution_delegator.rb,
lib/concurrent/collection/non_concurrent_priority_queue.rb,
lib/concurrent/synchronization/abstract_lockable_object.rb,
lib/concurrent/collection/map/non_concurrent_map_backend.rb,
lib/concurrent/collection/map/atomic_reference_map_backend.rb,
lib/concurrent/collection/java_non_concurrent_priority_queue.rb,
lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb,
lib-edge/concurrent/edge.rb,
lib-edge/concurrent/actor.rb,
lib-edge/concurrent/channel.rb,
lib-edge/concurrent/actor/core.rb,
lib-edge/concurrent/actor/root.rb,
lib-edge/concurrent/actor/utils.rb,
lib-edge/concurrent/actor/errors.rb,
lib-edge/concurrent/channel/tick.rb,
lib-edge/concurrent/edge/channel.rb,
lib-edge/concurrent/edge/version.rb,
lib-edge/concurrent/actor/context.rb,
lib-edge/concurrent/edge/promises.rb,
lib-edge/concurrent/edge/throttle.rb,
lib-edge/concurrent/lazy_register.rb,
lib-edge/concurrent/actor/envelope.rb,
lib-edge/concurrent/actor/behaviour.rb,
lib-edge/concurrent/actor/reference.rb,
lib-edge/concurrent/actor/type_check.rb,
lib-edge/concurrent/actor/utils/pool.rb,
lib-edge/concurrent/channel/selector.rb,
lib-edge/concurrent/edge/cancellation.rb,
lib-edge/concurrent/edge/erlang_actor.rb,
lib-edge/concurrent/actor/utils/ad_hoc.rb,
lib-edge/concurrent/channel/buffer/base.rb,
lib-edge/concurrent/actor/utils/balancer.rb,
lib-edge/concurrent/channel/buffer/timer.rb,
lib-edge/concurrent/edge/lock_free_queue.rb,
lib-edge/concurrent/actor/utils/broadcast.rb,
lib-edge/concurrent/channel/buffer/ticker.rb,
lib-edge/concurrent/edge/processing_actor.rb,
lib-edge/concurrent/actor/behaviour/awaits.rb,
lib-edge/concurrent/actor/behaviour/buffer.rb,
lib-edge/concurrent/channel/buffer/sliding.rb,
lib-edge/concurrent/actor/behaviour/linking.rb,
lib-edge/concurrent/actor/behaviour/pausing.rb,
lib-edge/concurrent/channel/buffer/buffered.rb,
lib-edge/concurrent/channel/buffer/dropping.rb,
lib-edge/concurrent/actor/behaviour/abstract.rb,
lib-edge/concurrent/actor/public_delegations.rb,
lib-edge/concurrent/channel/buffer/unbuffered.rb,
lib-edge/concurrent/edge/lock_free_linked_set.rb,
lib-edge/concurrent/actor/internal_delegations.rb,
lib-edge/concurrent/actor/behaviour/supervising.rb,
lib-edge/concurrent/actor/behaviour/termination.rb,
lib-edge/concurrent/channel/selector/put_clause.rb,
lib-edge/concurrent/actor/behaviour/sets_results.rb,
lib-edge/concurrent/channel/selector/take_clause.rb,
lib-edge/concurrent/edge/old_channel_integration.rb,
lib-edge/concurrent/actor/behaviour/removes_child.rb,
lib-edge/concurrent/channel/selector/after_clause.rb,
lib-edge/concurrent/channel/selector/error_clause.rb,
lib-edge/concurrent/edge/lock_free_linked_set/node.rb,
lib-edge/concurrent/channel/selector/default_clause.rb,
lib-edge/concurrent/actor/behaviour/executes_context.rb,
lib-edge/concurrent/edge/lock_free_linked_set/window.rb,
lib-edge/concurrent/actor/default_dead_letter_handler.rb,
lib-edge/concurrent/actor/behaviour/errors_on_unknown_message.rb
@@ -118,7 +118,7 @@

Overview

- Classes: Agent, Array, Atom, AtomicBoolean, AtomicFixnum, AtomicMarkableReference, AtomicReference, CachedThreadPool, Cancellation, Channel, ConcurrentUpdateError, CountDownLatch, CyclicBarrier, Delay, Event, Exchanger, FixedThreadPool, Future, Hash, IVar, ImmediateExecutor, IndirectImmediateExecutor, LazyRegister, LockFreeStack, MVar, Map, Maybe, MultipleAssignmentError, MultipleErrors, ProcessingActor, Promise, ReadWriteLock, ReentrantReadWriteLock, SafeTaskExecutor, ScheduledTask, Semaphore, SerializedExecution, SerializedExecutionDelegator, Set, SimpleExecutorService, SingleThreadExecutor, TVar, ThreadLocalVar, ThreadPoolExecutor, Throttle, TimerSet, TimerTask, Transaction, Tuple + Classes: Agent, Array, Atom, AtomicBoolean, AtomicFixnum, AtomicMarkableReference, AtomicReference, CachedThreadPool, Cancellation, Channel, ConcurrentUpdateError, CountDownLatch, CyclicBarrier, Delay, Event, Exchanger, FixedThreadPool, Future, Hash, IVar, ImmediateExecutor, IndirectImmediateExecutor, LazyRegister, LockFreeStack, MVar, Map, Maybe, MultipleAssignmentError, MultipleErrors, ProcessingActor, Promise, ReadWriteLock, ReentrantReadWriteLock, SafeTaskExecutor, ScheduledTask, Semaphore, SerializedExecution, SerializedExecutionDelegator, Set, SimpleExecutorService, SingleThreadExecutor, TVar, ThreadLocalVar, ThreadPoolExecutor, Throttle, TimerSet, TimerTask, Transaction, Tuple, WrappingExecutor

@@ -2527,12 +2527,12 @@

 
 
-155
-156
-157
+160 +161 +162 -
# File 'lib/concurrent/utility/processor_counter.rb', line 155
+      
# File 'lib/concurrent/utility/processor_counter.rb', line 160
 
 def self.physical_processor_count
   processor_counter.physical_processor_count
@@ -2557,12 +2557,12 @@ 

 
 
-151
-152
-153
+156 +157 +158

-
# File 'lib/concurrent/utility/processor_counter.rb', line 151
+      
# File 'lib/concurrent/utility/processor_counter.rb', line 156
 
 def self.processor_count
   processor_counter.processor_count
diff --git a/docs/master/Concurrent/Synchronization/Object.html b/docs/master/Concurrent/Synchronization/Object.html
index c5c48fdf7..9ebdc5ac0 100644
--- a/docs/master/Concurrent/Synchronization/Object.html
+++ b/docs/master/Concurrent/Synchronization/Object.html
@@ -117,7 +117,7 @@ 

Overview

diff --git a/docs/master/Concurrent/WrappingExecutor.html b/docs/master/Concurrent/WrappingExecutor.html new file mode 100644 index 000000000..432db19f2 --- /dev/null +++ b/docs/master/Concurrent/WrappingExecutor.html @@ -0,0 +1,528 @@ + + + + + + + Class: Concurrent::WrappingExecutor + + — Concurrent Ruby + + + + + + + + + + + + + + + + + + + +
+ + +

Class: Concurrent::WrappingExecutor + + + +

+
+ +
+
Inherits:
+
+ Synchronization::Object + + + show all + +
+
+ + + + + + + + + + + +
+
Defined in:
+
lib/concurrent/executor/wrapping_executor.rb
+
+ +
+ +

Overview

+
+

Used for wrapping an Executor with Wrapper which can modify arguments or task passed to Executor

+ + +
+
+
+ + +
+ + + + + + + +

+ Instance Method Summary + collapse +

+ + + + + + + + + + + +
+

Constructor Details

+ +
+

+ + #initialize(executor) {|*args, &task| ... } ⇒ WrappingExecutor + + + + + +

+
+

Returns a new instance of WrappingExecutor

+ + +
+
+
+

Parameters:

+
    + +
  • + + executor + + + (Executor) + + + + — +

    Executor to be wrapped

    +
    + +
  • + +
+ +

Yields:

+
    + +
  • + + + (*args, &task) + + + + — +

    Wrapper block which wraps the task with args before it is passed to the Executor

    +
    + +
  • + +
+

Yield Parameters:

+
    + +
  • + + *args + + + (Array<Object>) + + + + — +

    Wrapper block will get these from #post call

    +
    + +
  • + +
  • + + &task + + + (block) + + + + — +

    Wrapper block will get this from #post call

    +
    + +
  • + +
+

Yield Returns:

+
    + +
  • + + + (Array<Object>) + + + + — +

    args and task on the last place.

    +
    + +
  • + +
+ +
+ + + + +
+
+
+
+14
+15
+16
+17
+18
+
+
# File 'lib/concurrent/executor/wrapping_executor.rb', line 14
+
+def initialize(executor, &wrapper)
+  super()
+  @Wrapper  = wrapper
+  @Executor = executor
+end
+
+
+ +
+ + +
+

Instance Method Details

+ + +
+

+ + #can_overflow?Boolean + + + + + +

+
+ + +
+
+
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + +
  • + +
+ +
+ + + + +
+
+
+
+25
+26
+27
+
+
# File 'lib/concurrent/executor/wrapping_executor.rb', line 25
+
+def can_overflow?
+  @Executor.can_overflow?
+end
+
+
+ +
+

+ + #post(*args, &task) ⇒ undocumented + + + + + +

+ + + + +
+
+
+
+20
+21
+22
+23
+
+
# File 'lib/concurrent/executor/wrapping_executor.rb', line 20
+
+def post(*args, &task)
+  *args, task = @Wrapper.call(*args, &task)
+  @Executor.post(*args, &task)
+end
+
+
+ +
+

+ + #serialized?Boolean + + + + + +

+
+ + +
+
+
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + +
  • + +
+ +
+ + + + +
+
+
+
+29
+30
+31
+
+
# File 'lib/concurrent/executor/wrapping_executor.rb', line 29
+
+def serialized?
+  @Executor.serialized?
+end
+
+
+ +
+ +
+ + + + + +
+ + \ No newline at end of file diff --git a/docs/master/_index.html b/docs/master/_index.html index afe06c030..c5b0dae97 100644 --- a/docs/master/_index.html +++ b/docs/master/_index.html @@ -1376,6 +1376,13 @@

Namespace Listing A-Z

+
  • + WrappingExecutor + + (Concurrent) + +
  • + diff --git a/docs/master/class_list.html b/docs/master/class_list.html index ebbcb6290..ada06aa28 100644 --- a/docs/master/class_list.html +++ b/docs/master/class_list.html @@ -43,7 +43,7 @@

    Class List

    diff --git a/docs/master/method_list.html b/docs/master/method_list.html index 423c94307..3a5333b06 100644 --- a/docs/master/method_list.html +++ b/docs/master/method_list.html @@ -46,24 +46,24 @@

    Method List

  • - #<< - Concurrent::ThreadPoolExecutor + #<< + Concurrent::Agent
  • - #<< - Concurrent::Agent + #<< + Concurrent::ImmediateExecutor
  • - #<< - Concurrent::Edge::LockFreeLinkedSet + #<< + Concurrent::ThreadPoolExecutor
  • @@ -78,15 +78,15 @@

    Method List

  • - #<< - Concurrent::ImmediateExecutor + << + Concurrent::SimpleExecutorService
  • - << + #<< Concurrent::SimpleExecutorService
  • @@ -94,32 +94,32 @@

    Method List

  • - #<< - Concurrent::SimpleExecutorService + #<< + Concurrent::Edge::LockFreeLinkedSet
  • - #<=> - Concurrent::Edge::LockFreeLinkedSet::Head + #<=> + Concurrent::Maybe
  • - #<=> - Concurrent::Edge::LockFreeLinkedSet::Node + #<=> + Concurrent::Channel::Tick
  • - #<=> - Concurrent::Channel::Tick + #<=> + Concurrent::Edge::LockFreeLinkedSet::Node
  • @@ -134,8 +134,8 @@

    Method List

  • - #<=> - Concurrent::Maybe + #<=> + Concurrent::Edge::LockFreeLinkedSet::Head
  • @@ -158,40 +158,40 @@

    Method List

  • - #== - Concurrent::ErlangActor::Terminated + #== + Concurrent::ImmutableStruct
  • - #== - Concurrent::ErlangActor::Down + #== + Concurrent::Actor::Reference
  • - #== - Concurrent::ErlangActor::NoActor + #== + Concurrent::ErlangActor::Terminated
  • - #== - Concurrent::Actor::Reference + #== + Concurrent::ErlangActor::Down
  • - #== - Concurrent::ImmutableStruct + #== + Concurrent::ErlangActor::NoActor
  • @@ -270,40 +270,40 @@

    Method List

  • - #[] - Concurrent::SettableStruct + #[] + Concurrent::MutableStruct
  • - #[] - Concurrent::MutableStruct + #[] + Concurrent::SettableStruct
  • - [] - Concurrent::ErlangActor::EnvironmentConstants::AbstractLogicOperationMatcher + #[] + Concurrent::ImmutableStruct
  • - #[] - Concurrent::ImmutableStruct + #[] + Concurrent::LazyRegister
  • - #[] - Concurrent::LazyRegister + [] + Concurrent::ErlangActor::EnvironmentConstants::AbstractLogicOperationMatcher
  • @@ -358,32 +358,32 @@

    Method List

  • - #acquire_read_lock - Concurrent::ReentrantReadWriteLock + #acquire_read_lock + Concurrent::ReadWriteLock
  • - #acquire_read_lock - Concurrent::ReadWriteLock + #acquire_read_lock + Concurrent::ReentrantReadWriteLock
  • - #acquire_write_lock - Concurrent::ReentrantReadWriteLock + #acquire_write_lock + Concurrent::ReadWriteLock
  • - #acquire_write_lock - Concurrent::ReadWriteLock + #acquire_write_lock + Concurrent::ReentrantReadWriteLock
  • @@ -430,32 +430,32 @@

    Method List

  • - #add_observer - Concurrent::Collection::CopyOnNotifyObserverSet + #add_observer + Concurrent::IVar
  • - #add_observer - Concurrent::Collection::CopyOnWriteObserverSet + #add_observer + Concurrent::Concern::Observable
  • - #add_observer - Concurrent::Concern::Observable + #add_observer + Concurrent::Collection::CopyOnWriteObserverSet
  • - #add_observer - Concurrent::IVar + #add_observer + Concurrent::Collection::CopyOnNotifyObserverSet
  • @@ -582,16 +582,16 @@

    Method List

  • - #ask - Concurrent::ErlangActor::Pid + #ask + Concurrent::Actor::Reference
  • - #ask - Concurrent::Actor::Reference + #ask + Concurrent::ErlangActor::Pid
  • @@ -670,40 +670,40 @@

    Method List

  • - #attr_volatile - Concurrent::Synchronization::RbxAttrVolatile::ClassMethods + attr_volatile + Concurrent::Synchronization::Object
  • - #attr_volatile - Concurrent::Synchronization::TruffleRubyAttrVolatile::ClassMethods + #attr_volatile + Concurrent::Synchronization::MriAttrVolatile::ClassMethods
  • - #attr_volatile - Concurrent::Synchronization::MriAttrVolatile::ClassMethods + #attr_volatile + Concurrent::Synchronization::RbxAttrVolatile::ClassMethods
  • - attr_volatile - Concurrent::Synchronization::Object + #attr_volatile + Concurrent::Synchronization::JRubyAttrVolatile::ClassMethods
  • - #attr_volatile - Concurrent::Synchronization::JRubyAttrVolatile::ClassMethods + #attr_volatile + Concurrent::Synchronization::TruffleRubyAttrVolatile::ClassMethods
  • @@ -830,16 +830,16 @@

    Method List

  • - #behaviour - Concurrent::Actor::InternalDelegations + #behaviour + Concurrent::Actor::Core
  • - #behaviour - Concurrent::Actor::Core + #behaviour + Concurrent::Actor::InternalDelegations
  • @@ -870,32 +870,32 @@

    Method List

  • - #behaviour_definition - Concurrent::Actor::Context + #behaviour_definition + Concurrent::Actor::Root
  • - #behaviour_definition - Concurrent::Actor::RestartingContext + #behaviour_definition + Concurrent::Actor::AbstractContext
  • - #behaviour_definition - Concurrent::Actor::AbstractContext + #behaviour_definition + Concurrent::Actor::Context
  • - #behaviour_definition - Concurrent::Actor::Root + #behaviour_definition + Concurrent::Actor::RestartingContext
  • @@ -918,8 +918,8 @@

    Method List

  • - #blocking? - Concurrent::Channel::Buffer::Dropping + #blocking? + Concurrent::Channel::Buffer::Base
  • @@ -934,8 +934,8 @@

    Method List

  • - #blocking? - Concurrent::Channel::Buffer::Base + #blocking? + Concurrent::Channel::Buffer::Dropping
  • @@ -950,16 +950,16 @@

    Method List

  • - #broadcast - Concurrent::Actor::Behaviour::Abstract + #broadcast + Concurrent::Actor::Core
  • - #broadcast - Concurrent::Actor::Core + #broadcast + Concurrent::Actor::Behaviour::Abstract
  • @@ -998,8 +998,8 @@

    Method List

  • - #can_overflow? - Concurrent::SingleThreadExecutor + #can_overflow? + Concurrent::WrappingExecutor
  • @@ -1014,48 +1014,48 @@

    Method List

  • - #cancel - Concurrent::Future + #can_overflow? + Concurrent::SingleThreadExecutor
  • - #cancel - Concurrent::ScheduledTask + #cancel + Concurrent::Future
  • - #canceled? - Concurrent::Cancellation + #cancel + Concurrent::ScheduledTask
  • - #cancelled? - Concurrent::Future + #canceled? + Concurrent::Cancellation
  • - #cancelled? - Concurrent::ScheduledTask + #cancelled? + Concurrent::Future
  • - #capacity - Concurrent::Channel::Buffer::Base + #cancelled? + Concurrent::ScheduledTask
  • @@ -1070,15 +1070,15 @@

    Method List

  • - #chain - Concurrent::Promises::AbstractEventFuture + #capacity + Concurrent::Channel::Buffer::Base
  • - #chain_on + #chain Concurrent::Promises::AbstractEventFuture
  • @@ -1086,7 +1086,7 @@

    Method List

  • - #chain_resolvable + #chain_on Concurrent::Promises::AbstractEventFuture
  • @@ -1094,16 +1094,16 @@

    Method List

  • - #check! - Concurrent::Cancellation + #chain_resolvable + Concurrent::Promises::AbstractEventFuture
  • - #children - Concurrent::Actor::InternalDelegations + #check! + Concurrent::Cancellation
  • @@ -1117,6 +1117,14 @@

    Method List

  • +
    + #children + Concurrent::Actor::InternalDelegations +
    +
  • + + +
  • #clear Concurrent::LockFreeStack @@ -1124,7 +1132,7 @@

    Method List

  • -
  • +
  • #clear_each Concurrent::LockFreeStack @@ -1132,7 +1140,7 @@

    Method List

  • -
  • +
  • #clear_if Concurrent::LockFreeStack @@ -1140,7 +1148,7 @@

    Method List

  • -
  • +
  • #close Concurrent::Channel::Buffer::Base @@ -1148,7 +1156,7 @@

    Method List

  • -
  • +
  • #closed? Concurrent::Channel::Buffer::Base @@ -1156,7 +1164,7 @@

    Method List

  • -
  • +
  • #commit Concurrent::Transaction @@ -1164,7 +1172,7 @@

    Method List

  • -
  • +
  • #compare_and_clear Concurrent::LockFreeStack @@ -1172,7 +1180,7 @@

    Method List

  • -
  • +
  • #compare_and_pop Concurrent::LockFreeStack @@ -1180,7 +1188,7 @@

    Method List

  • -
  • +
  • #compare_and_push Concurrent::LockFreeStack @@ -1188,26 +1196,18 @@

    Method List

  • -
  • +
  • - #compare_and_set - Concurrent::AtomicMarkableReference + #compare_and_set + Concurrent::Atom
  • -
  • +
  • - #compare_and_set - Concurrent::AtomicReference -
    -
  • - - -
  • -
    - #compare_and_set - Concurrent::Atom + #compare_and_set + Concurrent::Tuple
  • @@ -1222,13 +1222,21 @@

    Method List

  • - #compare_and_set - Concurrent::Tuple + #compare_and_set + Concurrent::AtomicReference
  • +
    + #compare_and_set + Concurrent::AtomicMarkableReference +
    +
  • + + +
  • #compare_and_set_successor Concurrent::LockFreeQueue::Node @@ -1236,7 +1244,7 @@

    Method List

  • -
  • +
  • #complete? Concurrent::Concern::Obligation @@ -1244,7 +1252,7 @@

    Method List

  • -
  • +
  • #completed_task_count Concurrent::ThreadPoolExecutor @@ -1252,7 +1260,7 @@

    Method List

  • -
  • +
  • #compute Concurrent::Map @@ -1260,7 +1268,7 @@

    Method List

  • -
  • +
  • #compute_if_absent Concurrent::Map @@ -1268,7 +1276,7 @@

    Method List

  • -
  • +
  • #compute_if_present Concurrent::Map @@ -1276,7 +1284,7 @@

    Method List

  • -
  • +
  • #contains? Concurrent::Edge::LockFreeLinkedSet @@ -1284,7 +1292,7 @@

    Method List

  • -
  • +
  • #context Concurrent::Actor::Core @@ -1292,7 +1300,7 @@

    Method List

  • -
  • +
  • #context Concurrent::Actor::InternalDelegations @@ -1300,7 +1308,7 @@

    Method List

  • -
  • +
  • #context_class Concurrent::Actor::Core @@ -1308,7 +1316,7 @@

    Method List

  • -
  • +
  • #context_class Concurrent::Actor::PublicDelegations @@ -1316,7 +1324,7 @@

    Method List

  • -
  • +
  • #core Concurrent::Actor::AbstractContext @@ -1324,7 +1332,7 @@

    Method List

  • -
  • +
  • #core Concurrent::Actor::Behaviour::Abstract @@ -1332,7 +1340,7 @@

    Method List

  • -
  • +
  • #count Concurrent::CountDownLatch @@ -1340,7 +1348,7 @@

    Method List

  • -
  • +
  • #count_down Concurrent::CountDownLatch @@ -1348,6 +1356,14 @@

    Method List

  • +
  • +
    + #count_observers + Concurrent::Concern::Observable +
    +
  • + +
  • #count_observers @@ -1365,14 +1381,6 @@

    Method List

  • -
    - #count_observers - Concurrent::Concern::Observable -
    -
  • - - -
  • create_simple_logger Concurrent @@ -1380,7 +1388,7 @@

    Method List

  • -
  • +
  • create_stdlib_logger Concurrent @@ -1388,7 +1396,7 @@

    Method List

  • -
  • +
  • #curr Concurrent::Edge::LockFreeLinkedSet::Window @@ -1396,7 +1404,7 @@

    Method List

  • -
  • +
  • current Concurrent::Transaction @@ -1404,7 +1412,7 @@

    Method List

  • -
  • +
  • current Concurrent::Actor @@ -1412,7 +1420,7 @@

    Method List

  • -
  • +
  • current= Concurrent::Transaction @@ -1420,7 +1428,7 @@

    Method List

  • -
  • +
  • #data Concurrent::Edge::LockFreeLinkedSet::Node @@ -1428,7 +1436,7 @@

    Method List

  • -
  • +
  • dataflow Concurrent @@ -1436,7 +1444,7 @@

    Method List

  • -
  • +
  • dataflow! Concurrent @@ -1444,7 +1452,7 @@

    Method List

  • -
  • +
  • dataflow_with Concurrent @@ -1452,7 +1460,7 @@

    Method List

  • -
  • +
  • dataflow_with! Concurrent @@ -1460,7 +1468,7 @@

    Method List

  • -
  • +
  • #dead_letter_routing Concurrent::Actor::Core @@ -1468,6 +1476,14 @@

    Method List

  • +
  • +
    + #dead_letter_routing + Concurrent::Actor::Root +
    +
  • + +
  • #dead_letter_routing @@ -1494,40 +1510,40 @@

    Method List

  • - #dead_letter_routing - Concurrent::Actor::Root + #decrement + Concurrent::AtomicFixnum
  • - #decrement - Concurrent::AtomicFixnum + #default_actor_executor + Concurrent::ErlangActor::Functions
  • - #default_actor_executor - Concurrent::ErlangActor::Functions + #default_executor + Concurrent::Promises::FactoryMethods::Configuration
  • - #default_executor - Concurrent::Throttle + #default_executor + Concurrent::Actor::AbstractContext
  • - #default_executor - Concurrent::ErlangActor::Functions + #default_executor + Concurrent::Throttle
  • @@ -1542,8 +1558,8 @@

    Method List

  • - #default_executor - Concurrent::Actor::AbstractContext + #default_executor + Concurrent::ErlangActor::Functions
  • @@ -1558,39 +1574,39 @@

    Method List

  • - #default_executor - Concurrent::Promises::FactoryMethods::Configuration + #default_reference_class + Concurrent::Actor::AbstractContext
  • - #default_reference_class - Concurrent::Actor::AbstractContext + #delay + Concurrent::Promises::FactoryMethods
  • - #delay - Concurrent::Promises::Future + #delay + Concurrent::Promises::Event
  • - #delay - Concurrent::Promises::Event + #delay + Concurrent::Promises::Future
  • - #delay + #delay_on Concurrent::Promises::FactoryMethods
  • @@ -1598,16 +1614,16 @@

    Method List

  • - #delay_on - Concurrent::Promises::FactoryMethods + #delete + Concurrent::Map
  • - #delete - Concurrent::Map + #delete_observer + Concurrent::Concern::Observable
  • @@ -1621,14 +1637,6 @@

    Method List

  • -
    - #delete_observer - Concurrent::Concern::Observable -
    -
  • - - -
  • #delete_observer Concurrent::Collection::CopyOnNotifyObserverSet @@ -1636,15 +1644,15 @@

    Method List

  • -
  • +
  • - #delete_observers - Concurrent::Collection::CopyOnNotifyObserverSet + #delete_observers + Concurrent::Concern::Observable
  • -
  • +
  • #delete_observers Concurrent::Collection::CopyOnWriteObserverSet @@ -1652,15 +1660,15 @@

    Method List

  • -
  • +
  • - #delete_observers - Concurrent::Concern::Observable + #delete_observers + Concurrent::Collection::CopyOnNotifyObserverSet
  • -
  • +
  • #delete_pair Concurrent::Map @@ -1668,7 +1676,7 @@

    Method List

  • -
  • +
  • #demonitor Concurrent::ErlangActor::Environment @@ -1676,7 +1684,7 @@

    Method List

  • -
  • +
  • disable_at_exit_handlers! Concurrent @@ -1684,7 +1692,7 @@

    Method List

  • -
  • +
  • #distribute Concurrent::Actor::Utils::Balancer @@ -1692,7 +1700,7 @@

    Method List

  • -
  • +
  • #drain_permits Concurrent::Semaphore @@ -1700,14 +1708,6 @@

    Method List

  • -
  • -
    - #each - Concurrent::Edge::LockFreeLinkedSet -
    -
  • - -
  • #each @@ -1726,47 +1726,47 @@

    Method List

  • - #each - Concurrent::ImmutableStruct + #each + Concurrent::SettableStruct
  • - #each - Concurrent::LockFreeStack + #each + Concurrent::ImmutableStruct
  • - #each - Concurrent::SettableStruct + #each + Concurrent::Channel
  • - #each - Concurrent::Channel + #each + Concurrent::Edge::LockFreeLinkedSet
  • - #each_key - Concurrent::Map + #each + Concurrent::LockFreeStack
  • - #each_pair + #each_key Concurrent::Map
  • @@ -1774,40 +1774,40 @@

    Method List

  • - #each_pair - Concurrent::ImmutableStruct + #each_pair + Concurrent::Map
  • - #each_pair - Concurrent::SettableStruct + #each_pair + Concurrent::MutableStruct
  • - #each_pair - Concurrent::MutableStruct + #each_pair + Concurrent::SettableStruct
  • - #each_value - Concurrent::Map + #each_pair + Concurrent::ImmutableStruct
  • - #empty? - Concurrent::LockFreeStack + #each_value + Concurrent::Map
  • @@ -1830,21 +1830,29 @@

    Method List

  • - #empty? - Concurrent::Channel::Buffer::Unbuffered + #empty? + Concurrent::Channel::Buffer::Base
  • - #empty? - Concurrent::Channel::Buffer::Base + #empty? + Concurrent::Channel::Buffer::Unbuffered
  • +
    + #empty? + Concurrent::LockFreeStack +
    +
  • + + +
  • ensure_safe_initialization_when_final_fields_are_present Concurrent::Synchronization::Object @@ -1852,7 +1860,7 @@

    Method List

  • -
  • +
  • #envelope Concurrent::Actor::UnknownMessage @@ -1860,7 +1868,7 @@

    Method List

  • -
  • +
  • #envelope Concurrent::Actor::AbstractContext @@ -1868,7 +1876,7 @@

    Method List

  • -
  • +
  • #epoch Concurrent::Channel::Tick @@ -1876,7 +1884,7 @@

    Method List

  • -
  • +
  • #error Concurrent::Agent @@ -1884,7 +1892,7 @@

    Method List

  • -
  • +
  • #error_mode Concurrent::Agent @@ -1892,7 +1900,7 @@

    Method List

  • -
  • +
  • #error_strategy Concurrent::Actor::Behaviour::SetResults @@ -1900,7 +1908,7 @@

    Method List

  • -
  • +
  • #errors Concurrent::MultipleErrors @@ -1908,7 +1916,7 @@

    Method List

  • -
  • +
  • #evaluate_to Concurrent::Promises::ResolvableFuture @@ -1916,7 +1924,7 @@

    Method List

  • -
  • +
  • #evaluate_to! Concurrent::Promises::ResolvableFuture @@ -1924,7 +1932,7 @@

    Method List

  • -
  • +
  • #exception Concurrent::Concern::Obligation @@ -1932,7 +1940,7 @@

    Method List

  • -
  • +
  • #exception Concurrent::Promises::Future @@ -1940,7 +1948,7 @@

    Method List

  • -
  • +
  • #exchange Concurrent::Exchanger @@ -1948,7 +1956,7 @@

    Method List

  • -
  • +
  • #exchange! Concurrent::Exchanger @@ -1956,33 +1964,41 @@

    Method List

  • +
  • +
    + #execute + Concurrent::Future +
    +
  • + +
  • - #execute - Concurrent::Promise + execute + Concurrent::Future
  • - #execute - Concurrent::SafeTaskExecutor + #execute + Concurrent::Promise
  • - #execute - Concurrent::TimerTask + execute + Concurrent::Promise
  • - execute + #execute Concurrent::TimerTask
  • @@ -1990,16 +2006,16 @@

    Method List

  • - #execute - Concurrent::Channel::Selector::PutClause + execute + Concurrent::TimerTask
  • - #execute - Concurrent::Channel::Selector::DefaultClause + #execute + Concurrent::ScheduledTask
  • @@ -2014,72 +2030,72 @@

    Method List

  • - #execute - Concurrent::ScheduledTask + #execute + Concurrent::SafeTaskExecutor
  • - #execute - Concurrent::Future + #execute + Concurrent::Channel::Selector::PutClause
  • - execute - Concurrent::Future + #execute + Concurrent::Channel::Selector::TakeClause
  • - #execute - Concurrent::Channel::Selector::TakeClause + #execute + Concurrent::Channel::Selector::AfterClause
  • - execute - Concurrent::Promise + #execute + Concurrent::Channel::Selector::ErrorClause
  • - #execute - Concurrent::Channel::Selector::ErrorClause + #execute + Concurrent::Channel::Selector::DefaultClause
  • - #execute - Concurrent::Channel::Selector::AfterClause + #execution_interval + Concurrent::TimerTask
  • - #execution_interval - Concurrent::TimerTask + executor + Concurrent
  • - executor - Concurrent + #executor + Concurrent::SerializedExecution::Job
  • @@ -2093,14 +2109,6 @@

    Method List

  • -
    - #executor - Concurrent::SerializedExecution::Job -
    -
  • - - -
  • #executor Concurrent::Actor::PublicDelegations @@ -2108,7 +2116,7 @@

    Method List

  • -
  • +
  • #fail Concurrent::IVar @@ -2116,7 +2124,7 @@

    Method List

  • -
  • +
  • #fail Concurrent::Promise @@ -2124,7 +2132,7 @@

    Method List

  • -
  • +
  • #failed? Concurrent::Agent @@ -2132,23 +2140,23 @@

    Method List

  • -
  • +
  • - #fallback_policy - Concurrent::SingleThreadExecutor + #fallback_policy + Concurrent::ThreadPoolExecutor
  • -
  • +
  • - #fallback_policy - Concurrent::ThreadPoolExecutor + #fallback_policy + Concurrent::SingleThreadExecutor
  • -
  • +
  • #false? Concurrent::AtomicBoolean @@ -2156,7 +2164,7 @@

    Method List

  • -
  • +
  • #fetch Concurrent::Map @@ -2164,7 +2172,7 @@

    Method List

  • -
  • +
  • #fetch_or_store Concurrent::Map @@ -2172,7 +2180,7 @@

    Method List

  • -
  • +
  • #filtered_receivers Concurrent::Actor::Utils::Broadcast @@ -2180,7 +2188,7 @@

    Method List

  • -
  • +
  • find Concurrent::Edge::LockFreeLinkedSet::Window @@ -2188,7 +2196,7 @@

    Method List

  • -
  • +
  • #flat_event Concurrent::Promises::Future @@ -2196,7 +2204,7 @@

    Method List

  • -
  • +
  • #flat_future Concurrent::Promises::Future @@ -2204,7 +2212,7 @@

    Method List

  • -
  • +
  • #flat_map Concurrent::Promise @@ -2212,7 +2220,7 @@

    Method List

  • -
  • +
  • from Concurrent::Maybe @@ -2220,7 +2228,7 @@

    Method List

  • -
  • +
  • #from Concurrent::ErlangActor::Terminated @@ -2228,7 +2236,7 @@

    Method List

  • -
  • +
  • #from Concurrent::ErlangActor::Down @@ -2236,14 +2244,6 @@

    Method List

  • -
  • -
    - #fulfill - Concurrent::Promises::ResolvableFuture -
    -
  • - -
  • fulfill @@ -2254,8 +2254,8 @@

    Method List

  • - #fulfilled? - Concurrent::Promises::Future + #fulfill + Concurrent::Promises::ResolvableFuture
  • @@ -2270,16 +2270,16 @@

    Method List

  • - #fulfilled_future - Concurrent::Promises::FactoryMethods + #fulfilled? + Concurrent::Promises::Future
  • - #full? - Concurrent::Channel::Buffer::Dropping + #fulfilled_future + Concurrent::Promises::FactoryMethods
  • @@ -2302,80 +2302,80 @@

    Method List

  • - #full? - Concurrent::Channel::Buffer::Unbuffered + #full? + Concurrent::Channel::Buffer::Sliding
  • - #full? - Concurrent::Channel::Buffer::Sliding + #full? + Concurrent::Channel::Buffer::Dropping
  • - #future - Concurrent::Promises::FactoryMethods + #full? + Concurrent::Channel::Buffer::Unbuffered
  • - #future - Concurrent::Actor::Envelope + #future + Concurrent::Promises::FactoryMethods
  • - #future_on - Concurrent::Promises::FactoryMethods + #future + Concurrent::Actor::Envelope
  • - #get - Concurrent::AtomicMarkableReference + #future_on + Concurrent::Promises::FactoryMethods
  • - #get - Concurrent::ThreadSafe::Util::XorShiftRandom + #get + Concurrent::Tuple
  • - #get - Concurrent::Tuple + #get + Concurrent::AtomicReference
  • - #get - Concurrent::AtomicReference + #get + Concurrent::AtomicMarkableReference
  • - #get_and_set - Concurrent::AtomicReference + #get + Concurrent::ThreadSafe::Util::XorShiftRandom
  • @@ -2389,6 +2389,14 @@

    Method List

  • +
    + #get_and_set + Concurrent::AtomicReference +
    +
  • + + +
  • global_fast_executor Concurrent @@ -2396,7 +2404,7 @@

    Method List

  • -
  • +
  • global_immediate_executor Concurrent @@ -2404,7 +2412,7 @@

    Method List

  • -
  • +
  • global_io_executor Concurrent @@ -2412,7 +2420,7 @@

    Method List

  • -
  • +
  • global_logger Concurrent @@ -2420,7 +2428,7 @@

    Method List

  • -
  • +
  • global_logger= Concurrent @@ -2428,7 +2436,7 @@

    Method List

  • -
  • +
  • global_timer_set Concurrent @@ -2436,7 +2444,7 @@

    Method List

  • -
  • +
  • go Concurrent::Channel @@ -2444,7 +2452,7 @@

    Method List

  • -
  • +
  • go_loop Concurrent::Channel @@ -2452,7 +2460,7 @@

    Method List

  • -
  • +
  • go_loop_via Concurrent::Channel @@ -2460,7 +2468,7 @@

    Method List

  • -
  • +
  • go_via Concurrent::Channel @@ -2468,7 +2476,7 @@

    Method List

  • -
  • +
  • #guard! Concurrent::Actor::Core @@ -2476,7 +2484,7 @@

    Method List

  • -
  • +
  • #has_waiters? Concurrent::ReadWriteLock @@ -2484,7 +2492,7 @@

    Method List

  • -
  • +
  • #hash Concurrent::ErlangActor::Terminated @@ -2492,7 +2500,7 @@

    Method List

  • -
  • +
  • #hash Concurrent::ErlangActor::Down @@ -2500,7 +2508,7 @@

    Method List

  • -
  • +
  • #hash Concurrent::ErlangActor::NoActor @@ -2508,7 +2516,7 @@

    Method List

  • -
  • +
  • #idletime Concurrent::ThreadPoolExecutor @@ -2516,7 +2524,7 @@

    Method List

  • -
  • +
  • #incomplete? Concurrent::Concern::Obligation @@ -2524,7 +2532,7 @@

    Method List

  • -
  • +
  • #increment Concurrent::AtomicFixnum @@ -2532,7 +2540,7 @@

    Method List

  • -
  • +
  • #info Concurrent::ErlangActor::Down @@ -2540,7 +2548,7 @@

    Method List

  • -
  • +
  • #initial_delay Concurrent::ScheduledTask @@ -2548,146 +2556,138 @@

    Method List

  • -
  • -
    - #initialize - Concurrent::LockFreeStack -
    -
  • - -
  • - #initialize - Concurrent::Semaphore + #initialize + Concurrent::Map
  • - #initialize - Concurrent::Actor::Behaviour::Buffer + #initialize + Concurrent::Atom
  • - #initialize - Concurrent::Actor::Utils::Broadcast + #initialize + Concurrent::IVar
  • - #initialize - Concurrent::LockFreeQueue::Node + #initialize + Concurrent::MVar
  • - #initialize - Concurrent::Actor::Behaviour::Linking + #initialize + Concurrent::TVar
  • - #initialize - Concurrent::ScheduledTask + #initialize + Concurrent::Transaction
  • - #initialize - Concurrent::Actor::Behaviour::Pausing + #initialize + Concurrent::Agent::Error
  • - #initialize - Concurrent::Actor::Utils::Balancer + #initialize + Concurrent::Agent::ValidationError
  • - #initialize - Concurrent::Channel::Buffer::Base + #initialize + Concurrent::Agent
  • - #initialize - Concurrent::TimerSet + #initialize + Concurrent::Delay
  • - #initialize - Concurrent::AtomicFixnum + #initialize + Concurrent::Tuple
  • - #initialize - Concurrent::Actor::Utils::AsAdHoc + #initialize + Concurrent::MultipleAssignmentError
  • - #initialize - Concurrent::ErlangActor::NoActor + #initialize + Concurrent::MultipleErrors
  • - #initialize - Concurrent::AtomicBoolean + #initialize + Concurrent::Future
  • - #initialize - Concurrent::Actor::Behaviour::Abstract + #initialize + Concurrent::Promise
  • - #initialize - Concurrent::CyclicBarrier + #initialize + Concurrent::Exchanger
  • - #initialize - Concurrent::ReadWriteLock + #initialize + Concurrent::TimerTask
  • @@ -2702,272 +2702,272 @@

    Method List

  • - #initialize - Concurrent::ErlangActor::EnvironmentConstants::AbstractLogicOperationMatcher + #initialize + Concurrent::ScheduledTask
  • - #initialize - Concurrent::TimerTask + #initialize + Concurrent::Semaphore
  • - #initialize - Concurrent::Synchronization::Object + #initialize + Concurrent::TimerSet
  • - #initialize - Concurrent::Exchanger + #initialize + Concurrent::AtomicFixnum
  • - #initialize - Concurrent::Edge::LockFreeLinkedSet + #initialize + Concurrent::AtomicBoolean
  • - #initialize - Concurrent::AtomicReference + #initialize + Concurrent::CyclicBarrier
  • - #initialize - Concurrent::CountDownLatch + #initialize + Concurrent::ReadWriteLock
  • - #initialize - Concurrent::Actor::Behaviour::Supervising + #initialize + Concurrent::Synchronization::Object
  • - #initialize - Concurrent::ThreadLocalVar + #initialize + Concurrent::AtomicReference
  • - #initialize - Concurrent::Actor::Behaviour::Termination + #initialize + Concurrent::CountDownLatch
  • - #initialize - Concurrent::Channel::Selector::PutClause + #initialize + Concurrent::ThreadLocalVar
  • - #initialize - Concurrent::Cancellation + #initialize + Concurrent::LockFreeStack::Node
  • - #initialize - Concurrent::Actor::Utils::Pool + #initialize + Concurrent::FixedThreadPool
  • - #initialize - Concurrent::LockFreeStack::Node + #initialize + Concurrent::WrappingExecutor
  • - #initialize - Concurrent::FixedThreadPool + #initialize + Concurrent::CachedThreadPool
  • - #initialize - Concurrent::Actor::Behaviour::SetResults + #initialize + Concurrent::ImmediateExecutor
  • - #initialize - Concurrent::CachedThreadPool + #initialize + Concurrent::SafeTaskExecutor
  • - #initialize - Concurrent::ImmediateExecutor + #initialize + Concurrent::SerializedExecution
  • - #initialize - Concurrent::Channel::Selector::TakeClause + #initialize + Concurrent::ThreadPoolExecutor
  • - #initialize - Concurrent::Channel::Selector::AfterClause + #initialize + Concurrent::SingleThreadExecutor
  • - #initialize - Concurrent::SafeTaskExecutor + #initialize + Concurrent::AtomicMarkableReference
  • - #initialize - Concurrent::SerializedExecution + #initialize + Concurrent::ReentrantReadWriteLock
  • - #initialize - Concurrent::Promise + #initialize + Concurrent::IndirectImmediateExecutor
  • - #initialize - Concurrent::Channel::Selector::ErrorClause + #initialize + Concurrent::Collection::CopyOnWriteObserverSet
  • - #initialize - Concurrent::Future + #initialize + Concurrent::Collection::CopyOnNotifyObserverSet
  • - #initialize - Concurrent::MultipleErrors + #initialize + Concurrent::SerializedExecutionDelegator
  • - #initialize - Concurrent::MultipleAssignmentError + #initialize + Concurrent::Channel::ValidationError
  • - #initialize - Concurrent::Edge::LockFreeLinkedSet::Node + #initialize + Concurrent::Channel
  • - #initialize - Concurrent::Tuple + #initialize + Concurrent::Actor::Core
  • - #initialize - Concurrent::Actor::Envelope + #initialize + Concurrent::Actor::Root
  • - #initialize - Concurrent::ThreadPoolExecutor + #initialize + Concurrent::Actor::ActorTerminated
  • - #initialize - Concurrent::LazyRegister + #initialize + Concurrent::Actor::UnknownMessage
  • - #initialize - Concurrent::SingleThreadExecutor + #initialize + Concurrent::Channel::Tick
  • - #initialize - Concurrent::AtomicMarkableReference + #initialize + Concurrent::Promises::Channel
  • @@ -2982,224 +2982,224 @@

    Method List

  • - #initialize - Concurrent::Delay + #initialize + Concurrent::LazyRegister
  • - #initialize - Concurrent::ReentrantReadWriteLock + #initialize + Concurrent::Actor::Envelope
  • - #initialize - Concurrent::Edge::LockFreeLinkedSet::Tail + #initialize + Concurrent::Actor::Utils::Pool
  • - #initialize - Concurrent::Channel::Selector::DefaultClause + #initialize + Concurrent::Cancellation
  • - #initialize - Concurrent::Edge::LockFreeLinkedSet::Window + #initialize + Concurrent::ErlangActor::EnvironmentConstants::AbstractLogicOperationMatcher
  • - #initialize - Concurrent::Agent + #initialize + Concurrent::ErlangActor::NoActor
  • - #initialize - Concurrent::Agent::ValidationError + #initialize + Concurrent::Actor::Utils::AsAdHoc
  • - #initialize - Concurrent::Agent::Error + #initialize + Concurrent::Channel::Buffer::Base
  • - #initialize - Concurrent::Promises::Channel + #initialize + Concurrent::Actor::Utils::Balancer
  • - #initialize - Concurrent::Channel::Tick + #initialize + Concurrent::LockFreeQueue::Node
  • - #initialize - Concurrent::Transaction + #initialize + Concurrent::Actor::Utils::Broadcast
  • - #initialize - Concurrent::IndirectImmediateExecutor + #initialize + Concurrent::Actor::Behaviour::Buffer
  • - #initialize - Concurrent::Actor::UnknownMessage + #initialize + Concurrent::Actor::Behaviour::Linking
  • - #initialize - Concurrent::Collection::CopyOnWriteObserverSet + #initialize + Concurrent::Actor::Behaviour::Pausing
  • - #initialize - Concurrent::TVar + #initialize + Concurrent::Actor::Behaviour::Abstract
  • - #initialize - Concurrent::Collection::CopyOnNotifyObserverSet + #initialize + Concurrent::Edge::LockFreeLinkedSet
  • - #initialize - Concurrent::MVar + #initialize + Concurrent::Actor::Behaviour::Supervising
  • - #initialize - Concurrent::SerializedExecutionDelegator + #initialize + Concurrent::Actor::Behaviour::Termination
  • - #initialize - Concurrent::IVar + #initialize + Concurrent::Channel::Selector::PutClause
  • - #initialize - Concurrent::Actor::ActorTerminated + #initialize + Concurrent::Actor::Behaviour::SetResults
  • - #initialize - Concurrent::Actor::Root + #initialize + Concurrent::Channel::Selector::TakeClause
  • - #initialize - Concurrent::Channel::ValidationError + #initialize + Concurrent::Channel::Selector::AfterClause
  • - #initialize - Concurrent::Channel + #initialize + Concurrent::Channel::Selector::ErrorClause
  • - #initialize - Concurrent::Atom + #initialize + Concurrent::Edge::LockFreeLinkedSet::Node
  • - #initialize - Concurrent::Map + #initialize + Concurrent::Edge::LockFreeLinkedSet::Tail
  • - #initialize - Concurrent::Actor::Core + #initialize + Concurrent::Channel::Selector::DefaultClause
  • - #inspect - Concurrent::ImmutableStruct + #initialize + Concurrent::Edge::LockFreeLinkedSet::Window
  • - #inspect - Concurrent::SettableStruct + #initialize + Concurrent::LockFreeStack
  • @@ -3220,6 +3220,22 @@

    Method List

    +
  • +
    + #inspect + Concurrent::SettableStruct +
    +
  • + + +
  • +
    + #inspect + Concurrent::ImmutableStruct +
    +
  • + +
  • #inspection_data @@ -3254,7 +3270,7 @@

    Method List

  • - just + #just Concurrent::Maybe
  • @@ -3262,7 +3278,7 @@

    Method List

  • - #just + just Concurrent::Maybe
  • @@ -3278,16 +3294,16 @@

    Method List

  • - #key - Concurrent::Edge::LockFreeLinkedSet::Node + #key + Concurrent::Map
  • - #key - Concurrent::Map + #key + Concurrent::Edge::LockFreeLinkedSet::Node
  • @@ -3318,8 +3334,8 @@

    Method List

  • - #kill - Concurrent::SimpleExecutorService + #kill + Concurrent::ThreadPoolExecutor
  • @@ -3334,8 +3350,8 @@

    Method List

  • - #kill - Concurrent::ThreadPoolExecutor + #kill + Concurrent::SimpleExecutorService
  • @@ -3374,16 +3390,16 @@

    Method List

  • - #link - Concurrent::Actor::Behaviour::Linking + #link + Concurrent::ErlangActor::Environment
  • - #link - Concurrent::ErlangActor::Environment + #link + Concurrent::Actor::Behaviour::Linking
  • @@ -3406,16 +3422,16 @@

    Method List

  • - #log - Concurrent::Actor::InternalDelegations + #log + Concurrent::Actor::Core
  • - #log - Concurrent::Actor::Core + #log + Concurrent::Actor::InternalDelegations
  • @@ -3502,16 +3518,16 @@

    Method List

  • - #merge - Concurrent::ImmutableStruct + #merge + Concurrent::SettableStruct
  • - #merge - Concurrent::SettableStruct + #merge + Concurrent::ImmutableStruct
  • @@ -3598,24 +3614,24 @@

    Method List

  • - #name - Concurrent::Actor::PublicDelegations + #name + Concurrent::ErlangActor::Pid
  • - #name - Concurrent::ErlangActor::Pid + #name + Concurrent::ErlangActor::Environment
  • - #name - Concurrent::ErlangActor::Environment + #name + Concurrent::Actor::PublicDelegations
  • @@ -3630,8 +3646,8 @@

    Method List

  • - new - Concurrent::ImmutableStruct + new + Concurrent::MutableStruct
  • @@ -3646,8 +3662,8 @@

    Method List

  • - new - Concurrent::MutableStruct + new + Concurrent::ImmutableStruct
  • @@ -3670,40 +3686,40 @@

    Method List

  • - #next - Concurrent::Channel::Buffer::Unbuffered + #next + Concurrent::Channel
  • - #next - Concurrent::Channel::Buffer::Buffered + #next + Concurrent::Channel::Buffer::Base
  • - #next - Concurrent::Channel + #next + Concurrent::Channel::Buffer::Timer
  • - #next - Concurrent::Channel::Buffer::Timer + #next + Concurrent::Channel::Buffer::Buffered
  • - #next - Concurrent::Channel::Buffer::Base + #next + Concurrent::Channel::Buffer::Unbuffered
  • @@ -3726,23 +3742,23 @@

    Method List

  • - #next_node - Concurrent::Edge::LockFreeLinkedSet::Node + next_node + Node[nil, nil]
  • - next_node - Node[nil, nil] + #next_node + Concurrent::Edge::LockFreeLinkedSet::Node
  • - nothing + #nothing Concurrent::Maybe
  • @@ -3750,7 +3766,7 @@

    Method List

  • - #nothing + nothing Concurrent::Maybe
  • @@ -3782,16 +3798,16 @@

    Method List

  • - #notify_observers - Concurrent::Collection::CopyOnNotifyObserverSet + #notify_observers + Concurrent::Collection::CopyOnWriteObserverSet
  • - #notify_observers - Concurrent::Collection::CopyOnWriteObserverSet + #notify_observers + Concurrent::Collection::CopyOnNotifyObserverSet
  • @@ -3806,16 +3822,16 @@

    Method List

  • - #offer - Concurrent::Channel::Buffer::Base + #offer + Concurrent::Channel
  • - #offer - Concurrent::Channel + #offer + Concurrent::Channel::Buffer::Base
  • @@ -3894,72 +3910,72 @@

    Method List

  • - #on_envelope - Concurrent::Actor::Behaviour::Pausing + #on_envelope + Concurrent::Actor::Core
  • - #on_envelope - Concurrent::Actor::Core + #on_envelope + Concurrent::Actor::AbstractContext
  • - #on_envelope - Concurrent::Actor::AbstractContext + #on_envelope + Concurrent::Actor::Behaviour::Awaits
  • - #on_envelope - Concurrent::Actor::Behaviour::Awaits + #on_envelope + Concurrent::Actor::Behaviour::Buffer
  • - #on_envelope - Concurrent::Actor::Behaviour::ExecutesContext + #on_envelope + Concurrent::Actor::Behaviour::Linking
  • - #on_envelope - Concurrent::Actor::Behaviour::Linking + #on_envelope + Concurrent::Actor::Behaviour::Pausing
  • - #on_envelope - Concurrent::Actor::Behaviour::Supervising + #on_envelope + Concurrent::Actor::Behaviour::Abstract
  • - #on_envelope - Concurrent::Actor::Behaviour::Termination + #on_envelope + Concurrent::Actor::Behaviour::Supervising
  • - #on_envelope - Concurrent::Actor::Behaviour::Buffer + #on_envelope + Concurrent::Actor::Behaviour::Termination
  • @@ -3974,16 +3990,16 @@

    Method List

  • - #on_envelope - Concurrent::Actor::Behaviour::Abstract + #on_envelope + Concurrent::Actor::Behaviour::RemovesChild
  • - #on_envelope - Concurrent::Actor::Behaviour::RemovesChild + #on_envelope + Concurrent::Actor::Behaviour::ExecutesContext
  • @@ -3998,24 +4014,24 @@

    Method List

  • - #on_event - Concurrent::Actor::Behaviour::Abstract + #on_event + Concurrent::Actor::AbstractContext
  • - #on_event - Concurrent::Actor::AbstractContext + #on_event + Concurrent::Actor::Behaviour::Buffer
  • - #on_event - Concurrent::Actor::Behaviour::Buffer + #on_event + Concurrent::Actor::Behaviour::Linking
  • @@ -4030,16 +4046,16 @@

    Method List

  • - #on_event - Concurrent::Actor::Behaviour::ExecutesContext + #on_event + Concurrent::Actor::Behaviour::Abstract
  • - #on_event - Concurrent::Actor::Behaviour::Linking + #on_event + Concurrent::Actor::Behaviour::ExecutesContext
  • @@ -4070,16 +4086,16 @@

    Method List

  • - #on_message - Concurrent::Actor::DefaultDeadLetterHandler + #on_message + Concurrent::Actor::Root
  • - #on_message - Concurrent::Actor::Utils::AsAdHoc + #on_message + Concurrent::Actor::AbstractContext
  • @@ -4094,8 +4110,8 @@

    Method List

  • - #on_message - Concurrent::Actor::Root + #on_message + Concurrent::Actor::Utils::AsAdHoc
  • @@ -4110,16 +4126,16 @@

    Method List

  • - #on_message - Concurrent::Actor::AbstractContext + #on_message + Concurrent::Actor::Utils::Broadcast
  • - #on_message - Concurrent::Actor::Utils::Broadcast + #on_message + Concurrent::Actor::DefaultDeadLetterHandler
  • @@ -4198,16 +4214,16 @@

    Method List

  • - #parent - Concurrent::Actor::PublicDelegations + #parent + Concurrent::Actor::Core
  • - #parent - Concurrent::Actor::Core + #parent + Concurrent::Actor::PublicDelegations
  • @@ -4222,16 +4238,16 @@

    Method List

  • - #pass - Concurrent::Actor::Behaviour::Abstract + #pass + Concurrent::Actor::AbstractContext
  • - #pass - Concurrent::Actor::AbstractContext + #pass + Concurrent::Actor::Behaviour::Abstract
  • @@ -4270,16 +4286,16 @@

    Method List

  • - #peek - Concurrent::LockFreeStack + #peek + Concurrent::Promises::Channel
  • - #peek - Concurrent::Promises::Channel + #peek + Concurrent::LockFreeStack
  • @@ -4334,40 +4350,40 @@

    Method List

  • - #poll - Concurrent::Channel::Buffer::Base + #poll + Concurrent::Channel
  • - #poll - Concurrent::Channel::Buffer::Buffered + #poll + Concurrent::Channel::Buffer::Base
  • - #poll - Concurrent::Channel::Buffer::Unbuffered + #poll + Concurrent::Channel::Buffer::Timer
  • - #poll - Concurrent::Channel::Buffer::Timer + #poll + Concurrent::Channel::Buffer::Buffered
  • - #poll - Concurrent::Channel + #poll + Concurrent::Channel::Buffer::Unbuffered
  • @@ -4390,16 +4406,16 @@

    Method List

  • - #pop - Concurrent::LockFreeStack + #pop + Concurrent::Promises::Channel
  • - #pop - Concurrent::Promises::Channel + #pop + Concurrent::LockFreeStack
  • @@ -4430,96 +4446,96 @@

    Method List

  • - #post - Concurrent::ThreadPoolExecutor + #post + Concurrent::TimerSet
  • - #post - Concurrent::SingleThreadExecutor + #post + Concurrent::WrappingExecutor
  • - #post - Concurrent::IndirectImmediateExecutor + #post + Concurrent::ImmediateExecutor
  • - #post - Concurrent::SimpleExecutorService + #post + Concurrent::SerializedExecution
  • - post - Concurrent::SimpleExecutorService + #post + Concurrent::ThreadPoolExecutor
  • - #post - Concurrent::TimerSet + #post + Concurrent::SingleThreadExecutor
  • - #post - Concurrent::ImmediateExecutor + post + Concurrent::SimpleExecutorService
  • - #post - Concurrent::SerializedExecution + #post + Concurrent::SimpleExecutorService
  • - #post - Concurrent::SerializedExecutionDelegator + #post + Concurrent::IndirectImmediateExecutor
  • - #posts - Concurrent::SerializedExecution + #post + Concurrent::SerializedExecutionDelegator
  • - #pred - Concurrent::Edge::LockFreeLinkedSet::Window + #posts + Concurrent::SerializedExecution
  • - #process_envelope - Concurrent::Actor::Behaviour::Buffer + #pred + Concurrent::Edge::LockFreeLinkedSet::Window
  • @@ -4534,13 +4550,21 @@

    Method List

  • - #process_envelopes? + #process_envelope Concurrent::Actor::Behaviour::Buffer
  • +
    + #process_envelopes? + Concurrent::Actor::Behaviour::Buffer +
    +
  • + + +
  • #processing? Concurrent::ScheduledTask @@ -4548,7 +4572,7 @@

    Method List

  • -
  • +
  • processor_count Concurrent @@ -4556,6 +4580,14 @@

    Method List

  • +
  • +
    + #push + Concurrent::Promises::Channel +
    +
  • + +
  • #push @@ -4566,7 +4598,7 @@

    Method List

  • - #push + #push_op Concurrent::Promises::Channel
  • @@ -4574,16 +4606,16 @@

    Method List

  • - #push_op - Concurrent::Promises::Channel + #put + Concurrent::MVar
  • - #put - Concurrent::Channel::Buffer::Dropping + #put + Concurrent::Channel
  • @@ -4598,8 +4630,8 @@

    Method List

  • - #put - Concurrent::MVar + #put + Concurrent::Channel::Buffer::Timer
  • @@ -4614,16 +4646,16 @@

    Method List

  • - #put - Concurrent::Channel + #put + Concurrent::Channel::Buffer::Buffered
  • - #put - Concurrent::Channel::Buffer::Buffered + #put + Concurrent::Channel::Buffer::Dropping
  • @@ -4637,14 +4669,6 @@

    Method List

  • -
    - #put - Concurrent::Channel::Buffer::Timer -
    -
  • - - -
  • #put! Concurrent::Channel @@ -4652,7 +4676,7 @@

    Method List

  • -
  • +
  • #put? Concurrent::Channel @@ -4660,7 +4684,7 @@

    Method List

  • -
  • +
  • #put_if_absent Concurrent::Map @@ -4668,7 +4692,7 @@

    Method List

  • -
  • +
  • #queue_length Concurrent::ThreadPoolExecutor @@ -4676,7 +4700,7 @@

    Method List

  • -
  • +
  • #read Concurrent::Transaction @@ -4684,42 +4708,34 @@

    Method List

  • -
  • -
    - #reason - Concurrent::Promises::Future -
    -
  • - -
  • - #reason - Concurrent::ErlangActor::Terminated + #reason + Concurrent::Concern::Obligation
  • - #reason - Concurrent::Concern::Obligation + #reason + Concurrent::ErlangActor::Terminated
  • - #reason - Concurrent::Promises::ResolvableFuture + #reason + Concurrent::Promises::Future
  • - #receive - Concurrent::ProcessingActor + #reason + Concurrent::Promises::ResolvableFuture
  • @@ -4734,24 +4750,24 @@

    Method List

  • - #reconfigure - Concurrent::Delay + #receive + Concurrent::ProcessingActor
  • - #redirect - Concurrent::Actor::InternalDelegations + #reconfigure + Concurrent::Delay
  • - #reference - Concurrent::Actor::PublicDelegations + #redirect + Concurrent::Actor::InternalDelegations
  • @@ -4766,31 +4782,31 @@

    Method List

  • - #reference - Concurrent::ErlangActor::Down + #reference + Concurrent::Actor::ActorTerminated
  • - #reference - Concurrent::Actor::ActorTerminated + #reference + Concurrent::ErlangActor::Down
  • - #register - Concurrent::LazyRegister + #reference + Concurrent::Actor::PublicDelegations
  • - #registered? + #register Concurrent::LazyRegister
  • @@ -4798,8 +4814,8 @@

    Method List

  • - #reject - Concurrent::Promises::ResolvableFuture + #registered? + Concurrent::LazyRegister
  • @@ -4813,6 +4829,14 @@

    Method List

  • +
    + #reject + Concurrent::Promises::ResolvableFuture +
    +
  • + + +
  • #reject! Concurrent::Actor::Envelope @@ -4820,7 +4844,7 @@

    Method List

  • -
  • +
  • #reject_envelope Concurrent::Actor::Behaviour::Abstract @@ -4828,7 +4852,7 @@

    Method List

  • -
  • +
  • #rejected? Concurrent::Concern::Obligation @@ -4836,7 +4860,7 @@

    Method List

  • -
  • +
  • #rejected? Concurrent::Promises::Future @@ -4844,7 +4868,7 @@

    Method List

  • -
  • +
  • #rejected_future Concurrent::Promises::FactoryMethods @@ -4852,15 +4876,15 @@

    Method List

  • -
  • +
  • - #release - Concurrent::Throttle + #release + Concurrent::Semaphore
  • -
  • +
  • #release Concurrent::Promises::Resolvable @@ -4868,15 +4892,15 @@

    Method List

  • -
  • +
  • - #release - Concurrent::Semaphore + #release + Concurrent::Throttle
  • -
  • +
  • #release_read_lock Concurrent::ReadWriteLock @@ -4884,7 +4908,7 @@

    Method List

  • -
  • +
  • #release_read_lock Concurrent::ReentrantReadWriteLock @@ -4892,7 +4916,7 @@

    Method List

  • -
  • +
  • #release_write_lock Concurrent::ReadWriteLock @@ -4900,7 +4924,7 @@

    Method List

  • -
  • +
  • #release_write_lock Concurrent::ReentrantReadWriteLock @@ -4908,7 +4932,7 @@

    Method List

  • -
  • +
  • #remaining_capacity Concurrent::ThreadPoolExecutor @@ -4916,7 +4940,7 @@

    Method List

  • -
  • +
  • #remove Concurrent::Edge::LockFreeLinkedSet @@ -4924,7 +4948,7 @@

    Method List

  • -
  • +
  • #remove_child Concurrent::Actor::Core @@ -4932,7 +4956,7 @@

    Method List

  • -
  • +
  • #replace_if Concurrent::LockFreeStack @@ -4940,7 +4964,7 @@

    Method List

  • -
  • +
  • #replace_if_exists Concurrent::Map @@ -4948,7 +4972,7 @@

    Method List

  • -
  • +
  • #replace_pair Concurrent::Map @@ -4956,7 +4980,7 @@

    Method List

  • -
  • +
  • #reply Concurrent::ErlangActor::Environment @@ -4964,7 +4988,7 @@

    Method List

  • -
  • +
  • #reply_resolution Concurrent::ErlangActor::Environment @@ -4972,7 +4996,7 @@

    Method List

  • -
  • +
  • #reschedule Concurrent::ScheduledTask @@ -4980,7 +5004,7 @@

    Method List

  • -
  • +
  • #rescue Concurrent::Promise @@ -4988,7 +5012,7 @@

    Method List

  • -
  • +
  • #rescue Concurrent::Promises::Future @@ -4996,7 +5020,7 @@

    Method List

  • -
  • +
  • #rescue_on Concurrent::Promises::Future @@ -5004,7 +5028,7 @@

    Method List

  • -
  • +
  • #reserve Concurrent::Promises::Resolvable @@ -5012,7 +5036,7 @@

    Method List

  • -
  • +
  • #reset Concurrent::Atom @@ -5020,14 +5044,6 @@

    Method List

  • -
  • -
    - #reset - Concurrent::ScheduledTask -
    -
  • - -
  • #reset @@ -5038,31 +5054,31 @@

    Method List

  • - #reset - Concurrent::CyclicBarrier + #reset + Concurrent::ScheduledTask
  • - #reset! - Concurrent::Actor::Behaviour::Pausing + #reset + Concurrent::CyclicBarrier
  • - #resolvable_event - Concurrent::Promises::FactoryMethods + #reset! + Concurrent::Actor::Behaviour::Pausing
  • - #resolvable_event_on + #resolvable_event Concurrent::Promises::FactoryMethods
  • @@ -5070,7 +5086,7 @@

    Method List

  • - #resolvable_future + #resolvable_event_on Concurrent::Promises::FactoryMethods
  • @@ -5078,7 +5094,7 @@

    Method List

  • - #resolvable_future_on + #resolvable_future Concurrent::Promises::FactoryMethods
  • @@ -5086,8 +5102,8 @@

    Method List

  • - #resolve - Concurrent::Promises::ResolvableFuture + #resolvable_future_on + Concurrent::Promises::FactoryMethods
  • @@ -5101,6 +5117,14 @@

    Method List

  • +
    + #resolve + Concurrent::Promises::ResolvableFuture +
    +
  • + + +
  • #resolved? Concurrent::Promises::AbstractEventFuture @@ -5108,7 +5132,7 @@

    Method List

  • -
  • +
  • #resolved_event Concurrent::Promises::FactoryMethods @@ -5116,7 +5140,7 @@

    Method List

  • -
  • +
  • #resolved_future Concurrent::Promises::FactoryMethods @@ -5124,7 +5148,7 @@

    Method List

  • -
  • +
  • #restart Concurrent::Agent @@ -5132,7 +5156,7 @@

    Method List

  • -
  • +
  • #restart! Concurrent::Actor::Behaviour::Pausing @@ -5140,7 +5164,7 @@

    Method List

  • -
  • +
  • restarting_behaviour_definition Concurrent::Actor::Behaviour @@ -5148,7 +5172,7 @@

    Method List

  • -
  • +
  • #result Concurrent::Promises::Future @@ -5156,7 +5180,7 @@

    Method List

  • -
  • +
  • #result Concurrent::Promises::ResolvableFuture @@ -5164,7 +5188,7 @@

    Method List

  • -
  • +
  • #resume! Concurrent::Actor::Behaviour::Pausing @@ -5172,7 +5196,7 @@

    Method List

  • -
  • +
  • root Concurrent::Actor @@ -5180,7 +5204,7 @@

    Method List

  • -
  • +
  • #run Concurrent::Promises::Future @@ -5188,14 +5212,6 @@

    Method List

  • -
  • -
    - #running? - Concurrent::SingleThreadExecutor -
    -
  • - -
  • #running? @@ -5214,31 +5230,31 @@

    Method List

  • - #running? - Concurrent::SimpleExecutorService + #running? + Concurrent::ThreadPoolExecutor
  • - #running? - Concurrent::ThreadPoolExecutor + #running? + Concurrent::SingleThreadExecutor
  • - safe_initialization! - Concurrent::Synchronization::Object + #running? + Concurrent::SimpleExecutorService
  • - safe_initialization? + safe_initialization! Concurrent::Synchronization::Object
  • @@ -5246,8 +5262,8 @@

    Method List

  • - #schedule - Concurrent::Promises::Event + safe_initialization? + Concurrent::Synchronization::Object
  • @@ -5261,6 +5277,14 @@

    Method List

  • +
    + #schedule + Concurrent::Promises::Event +
    +
  • + + +
  • #schedule Concurrent::Promises::Future @@ -5268,7 +5292,7 @@

    Method List

  • -
  • +
  • #schedule_execution Concurrent::Actor::Core @@ -5276,7 +5300,7 @@

    Method List

  • -
  • +
  • #schedule_on Concurrent::Promises::FactoryMethods @@ -5284,7 +5308,7 @@

    Method List

  • -
  • +
  • #schedule_time Concurrent::ScheduledTask @@ -5292,7 +5316,7 @@

    Method List

  • -
  • +
  • #scheduled_task_count Concurrent::ThreadPoolExecutor @@ -5300,26 +5324,34 @@

    Method List

  • +
  • +
    + #select + Concurrent::MutableStruct +
    +
  • + +
  • - select - Concurrent::Channel + #select + Concurrent::SettableStruct
  • - #select - Concurrent::MutableStruct + #select + Concurrent::ImmutableStruct
  • - select - Concurrent::Promises::Channel + select + Concurrent::Channel
  • @@ -5334,16 +5366,16 @@

    Method List

  • - #select - Concurrent::SettableStruct + select + Concurrent::Promises::Channel
  • - #select - Concurrent::ImmutableStruct + #select_matching + Concurrent::Promises::Channel
  • @@ -5358,7 +5390,7 @@

    Method List

  • - #select_matching + #select_op Concurrent::Promises::Channel
  • @@ -5366,7 +5398,7 @@

    Method List

  • - #select_op + select_op Concurrent::Promises::Channel
  • @@ -5374,7 +5406,7 @@

    Method List

  • - select_op + #select_op_matching Concurrent::Promises::Channel
  • @@ -5382,7 +5414,7 @@

    Method List

  • - #select_op_matching + select_op_matching Concurrent::Promises::Channel
  • @@ -5390,15 +5422,15 @@

    Method List

  • - select_op_matching - Concurrent::Promises::Channel + #send + Concurrent::Agent
  • - #send + #send! Concurrent::Agent
  • @@ -5406,7 +5438,7 @@

    Method List

  • - #send! + #send_off Concurrent::Agent
  • @@ -5414,7 +5446,7 @@

    Method List

  • - #send_off + #send_off! Concurrent::Agent
  • @@ -5422,7 +5454,7 @@

    Method List

  • - #send_off! + #send_via Concurrent::Agent
  • @@ -5430,7 +5462,7 @@

    Method List

  • - #send_via + #send_via! Concurrent::Agent
  • @@ -5438,15 +5470,15 @@

    Method List

  • - #send_via! - Concurrent::Agent + #sender + Concurrent::Actor::Envelope
  • - #sender + #sender_path Concurrent::Actor::Envelope
  • @@ -5454,80 +5486,80 @@

    Method List

  • - #sender_path - Concurrent::Actor::Envelope + #serialized? + Concurrent::WrappingExecutor
  • - #serialized? - Concurrent::SingleThreadExecutor + #serialized? + Concurrent::ThreadPoolExecutor
  • - #serialized? - Concurrent::ThreadPoolExecutor + #serialized? + Concurrent::SingleThreadExecutor
  • - #set - Concurrent::Promise + #set + Concurrent::IVar
  • - #set - Concurrent::AtomicMarkableReference + #set + Concurrent::Tuple
  • - #set - Concurrent::AtomicReference + #set + Concurrent::Future
  • - #set - Concurrent::Event + #set + Concurrent::Promise
  • - #set - Concurrent::Future + #set + Concurrent::Event
  • - #set - Concurrent::Tuple + #set + Concurrent::AtomicReference
  • - #set - Concurrent::IVar + #set + Concurrent::AtomicMarkableReference
  • @@ -5550,80 +5582,80 @@

    Method List

  • - #shutdown - Concurrent::SingleThreadExecutor + #shutdown + Concurrent::ImmediateExecutor
  • - #shutdown - Concurrent::SimpleExecutorService + #shutdown + Concurrent::ThreadPoolExecutor
  • - #shutdown - Concurrent::ThreadPoolExecutor + #shutdown + Concurrent::SingleThreadExecutor
  • - #shutdown - Concurrent::ImmediateExecutor + #shutdown + Concurrent::SimpleExecutorService
  • - #shutdown? - Concurrent::SimpleExecutorService + #shutdown? + Concurrent::ImmediateExecutor
  • - #shutdown? - Concurrent::SingleThreadExecutor + #shutdown? + Concurrent::ThreadPoolExecutor
  • - #shutdown? - Concurrent::ThreadPoolExecutor + #shutdown? + Concurrent::SingleThreadExecutor
  • - #shutdown? - Concurrent::ImmediateExecutor + #shutdown? + Concurrent::SimpleExecutorService
  • - #shuttingdown? - Concurrent::ThreadPoolExecutor + #shuttingdown? + Concurrent::ImmediateExecutor
  • - #shuttingdown? - Concurrent::ImmediateExecutor + #shuttingdown? + Concurrent::ThreadPoolExecutor
  • @@ -5646,64 +5678,64 @@

    Method List

  • - #size - Concurrent::Tuple + #size + Concurrent::Map
  • - #size - Concurrent::Promises::Channel + #size + Concurrent::Tuple
  • - #size - Concurrent::Map + #size + Concurrent::Promises::Channel
  • - #size - Concurrent::Channel::Buffer::Unbuffered + #size + Concurrent::Channel::Buffer::Base
  • - #size - Concurrent::Channel::Buffer::Base + #size + Concurrent::Channel::Buffer::Unbuffered
  • - spawn - Concurrent::Actor::AbstractContext + spawn + Concurrent::Actor
  • - #spawn - Concurrent::ErlangActor::Environment + spawn + Concurrent::Actor::AbstractContext
  • - spawn - Concurrent::Actor + #spawn + Concurrent::ErlangActor::Environment
  • @@ -5742,16 +5774,16 @@

    Method List

  • - #state - Concurrent::Promises::AbstractEventFuture + #state + Concurrent::Concern::Obligation
  • - #state - Concurrent::Concern::Obligation + #state + Concurrent::Promises::AbstractEventFuture
  • @@ -5822,40 +5854,40 @@

    Method List

  • - #take - Concurrent::Channel + #take + Concurrent::MVar
  • - #take - Concurrent::Channel::Buffer::Timer + #take + Concurrent::Channel
  • - #take - Concurrent::Channel::Buffer::Buffered + #take + Concurrent::Channel::Buffer::Base
  • - #take - Concurrent::Channel::Buffer::Base + #take + Concurrent::Channel::Buffer::Timer
  • - #take - Concurrent::MVar + #take + Concurrent::Channel::Buffer::Buffered
  • @@ -5886,8 +5918,8 @@

    Method List

  • - #tell - Concurrent::ErlangActor::Pid + #tell + Concurrent::Actor::AbstractContext
  • @@ -5902,8 +5934,8 @@

    Method List

  • - #tell - Concurrent::Actor::AbstractContext + #tell + Concurrent::ErlangActor::Pid
  • @@ -5950,16 +5982,16 @@

    Method List

  • - #terminate! - Concurrent::Actor::Behaviour::Termination + #terminate! + Concurrent::Actor::InternalDelegations
  • - #terminate! - Concurrent::Actor::InternalDelegations + #terminate! + Concurrent::Actor::Behaviour::Termination
  • @@ -5982,32 +6014,32 @@

    Method List

  • - #terminated - Concurrent::Actor::Behaviour::Termination + #terminated + Concurrent::ErlangActor::Environment
  • - #terminated - Concurrent::ErlangActor::Environment + #terminated + Concurrent::Actor::Behaviour::Termination
  • - #terminated? - Concurrent::Actor::Behaviour::Termination + #terminated? + Concurrent::Actor::InternalDelegations
  • - #terminated? - Concurrent::Actor::InternalDelegations + #terminated? + Concurrent::Actor::Behaviour::Termination
  • @@ -6126,24 +6158,24 @@

    Method List

  • - #to_ary - Concurrent::ErlangActor::Terminated + #to_ary + Concurrent::Cancellation
  • - #to_ary - Concurrent::ErlangActor::Down + #to_ary + Concurrent::ErlangActor::Terminated
  • - #to_ary - Concurrent::Cancellation + #to_ary + Concurrent::ErlangActor::Down
  • @@ -6158,16 +6190,16 @@

    Method List

  • - #to_event - Concurrent::Promises::Future + #to_event + Concurrent::Promises::Event
  • - #to_event - Concurrent::Promises::Event + #to_event + Concurrent::Promises::Future
  • @@ -6214,8 +6246,8 @@

    Method List

  • - #to_s - Concurrent::Promises::Future + #to_s + Concurrent::AtomicFixnum
  • @@ -6230,40 +6262,40 @@

    Method List

  • - #to_s - Concurrent::Channel::Tick + #to_s + Concurrent::AtomicReference
  • - #to_s - Concurrent::AtomicFixnum + #to_s + Concurrent::Channel::Tick
  • - #to_s - Concurrent::ErlangActor::Pid + #to_s + Concurrent::Promises::Channel
  • - #to_s - Concurrent::AtomicReference + #to_s + Concurrent::Throttle
  • - #to_s - Concurrent::ProcessingActor + #to_s + Concurrent::Actor::Reference
  • @@ -6278,40 +6310,40 @@

    Method List

  • - #to_s - Concurrent::Promises::Channel + #to_s + Concurrent::ErlangActor::Pid
  • - #to_s - Concurrent::Actor::Reference + #to_s + Concurrent::ProcessingActor
  • - #to_s - Concurrent::Throttle + #to_s + Concurrent::LockFreeStack
  • - #to_s - Concurrent::LockFreeStack + #to_s + Concurrent::Promises::AbstractEventFuture
  • - #to_s - Concurrent::Promises::AbstractEventFuture + #to_s + Concurrent::Promises::Future
  • @@ -6390,16 +6422,16 @@

    Method List

  • - #try_acquire - Concurrent::Throttle + #try_acquire + Concurrent::Semaphore
  • - #try_acquire - Concurrent::Semaphore + #try_acquire + Concurrent::Throttle
  • @@ -6470,7 +6502,7 @@

    Method List

  • - try_select_matching + #try_select_matching Concurrent::Promises::Channel
  • @@ -6478,7 +6510,7 @@

    Method List

  • - #try_select_matching + try_select_matching Concurrent::Promises::Channel
  • @@ -6502,16 +6534,16 @@

    Method List

  • - #try_update - Concurrent::AtomicMarkableReference + #try_update + Concurrent::AtomicReference
  • - #try_update - Concurrent::AtomicReference + #try_update + Concurrent::AtomicMarkableReference
  • @@ -6550,16 +6582,16 @@

    Method List

  • - #unlink - Concurrent::Actor::Behaviour::Linking + #unlink + Concurrent::ErlangActor::Environment
  • - #unlink - Concurrent::ErlangActor::Environment + #unlink + Concurrent::Actor::Behaviour::Linking
  • @@ -6590,16 +6622,16 @@

    Method List

  • - #update - Concurrent::AtomicReference + #update + Concurrent::AtomicFixnum
  • - #update - Concurrent::AtomicFixnum + #update + Concurrent::AtomicReference
  • @@ -6662,96 +6694,96 @@

    Method List

  • - #value - Concurrent::Concern::Obligation + #value + Concurrent::Atom
  • - #value - Concurrent::AtomicFixnum + #value + Concurrent::TVar
  • - #value - Concurrent::AtomicBoolean + #value + Concurrent::Agent
  • - #value - Concurrent::ThreadLocalVar + #value + Concurrent::Delay
  • - #value - Concurrent::Concern::Dereferenceable + #value + Concurrent::Concern::Obligation
  • - #value - Concurrent::LockFreeStack::Node + #value + Concurrent::AtomicFixnum
  • - #value - Concurrent::Delay + #value + Concurrent::AtomicBoolean
  • - #value - Concurrent::AtomicMarkableReference + #value + Concurrent::ThreadLocalVar
  • - #value - Concurrent::Agent + #value + Concurrent::Concern::Dereferenceable
  • - #value - Concurrent::TVar + #value + Concurrent::LockFreeStack::Node
  • - #value - Concurrent::Promises::Future + #value + Concurrent::AtomicMarkableReference
  • - #value - Concurrent::Atom + #value + Concurrent::Promises::Future
  • @@ -6774,8 +6806,8 @@

    Method List

  • - #value! - Concurrent::Promises::ResolvableFuture + #value! + Concurrent::Concern::Obligation
  • @@ -6790,40 +6822,40 @@

    Method List

  • - #value! - Concurrent::Concern::Obligation + #value! + Concurrent::Promises::ResolvableFuture
  • - #value= - Concurrent::AtomicFixnum + #value= + Concurrent::TVar
  • - #value= - Concurrent::TVar + #value= + Concurrent::AtomicFixnum
  • - #value= - Concurrent::ThreadLocalVar + #value= + Concurrent::AtomicBoolean
  • - #value= - Concurrent::AtomicBoolean + #value= + Concurrent::ThreadLocalVar
  • @@ -6838,32 +6870,32 @@

    Method List

  • - #values - Concurrent::ImmutableStruct + #values + Concurrent::Map
  • - #values - Concurrent::SettableStruct + #values + Concurrent::MutableStruct
  • - #values - Concurrent::MutableStruct + #values + Concurrent::SettableStruct
  • - #values - Concurrent::Map + #values + Concurrent::ImmutableStruct
  • @@ -6878,16 +6910,16 @@

    Method List

  • - #values_at - Concurrent::ImmutableStruct + #values_at + Concurrent::SettableStruct
  • - #values_at - Concurrent::SettableStruct + #values_at + Concurrent::ImmutableStruct
  • @@ -6902,48 +6934,48 @@

    Method List

  • - #wait - Concurrent::CountDownLatch + #wait + Concurrent::Agent
  • - #wait - Concurrent::Promises::ResolvableFuture + #wait + Concurrent::Delay
  • - #wait - Concurrent::Agent + #wait + Concurrent::Event
  • - #wait - Concurrent::Delay + #wait + Concurrent::Concern::Obligation
  • - #wait - Concurrent::Concern::Obligation + #wait + Concurrent::CyclicBarrier
  • - #wait - Concurrent::Promises::ResolvableEvent + #wait + Concurrent::CountDownLatch
  • @@ -6958,48 +6990,48 @@

    Method List

  • - #wait - Concurrent::CyclicBarrier + #wait + Concurrent::Promises::ResolvableEvent
  • - #wait - Concurrent::Event + #wait + Concurrent::Promises::ResolvableFuture
  • - #wait! - Concurrent::Promises::ResolvableFuture + #wait! + Concurrent::Concern::Obligation
  • - #wait! - Concurrent::Concern::Obligation + #wait! + Concurrent::Promises::Future
  • - #wait! - Concurrent::Promises::Future + #wait! + Concurrent::Promises::ResolvableFuture
  • - #wait_for_termination - Concurrent::SingleThreadExecutor + #wait_for_termination + Concurrent::ImmediateExecutor
  • @@ -7014,8 +7046,8 @@

    Method List

  • - #wait_for_termination - Concurrent::ImmediateExecutor + #wait_for_termination + Concurrent::SingleThreadExecutor
  • @@ -7038,40 +7070,40 @@

    Method List

  • - #with_default_executor - Concurrent::Promises::Event + #with_default_executor + Concurrent::Promises::AbstractEventFuture
  • - #with_default_executor - Concurrent::Promises::Future + #with_default_executor + Concurrent::Promises::Event
  • - #with_default_executor - Concurrent::Promises::AbstractEventFuture + #with_default_executor + Concurrent::Promises::Future
  • - #with_hidden_resolvable - Concurrent::Promises::ResolvableFuture + #with_hidden_resolvable + Concurrent::Promises::ResolvableEvent
  • - #with_hidden_resolvable - Concurrent::Promises::ResolvableEvent + #with_hidden_resolvable + Concurrent::Promises::ResolvableFuture
  • @@ -7086,32 +7118,32 @@

    Method List

  • - #with_read_lock - Concurrent::ReentrantReadWriteLock + #with_read_lock + Concurrent::ReadWriteLock
  • - #with_read_lock - Concurrent::ReadWriteLock + #with_read_lock + Concurrent::ReentrantReadWriteLock
  • - #with_write_lock - Concurrent::ReentrantReadWriteLock + #with_write_lock + Concurrent::ReadWriteLock
  • - #with_write_lock - Concurrent::ReadWriteLock + #with_write_lock + Concurrent::ReentrantReadWriteLock
  • @@ -7158,16 +7190,16 @@

    Method List

  • - #zip - Concurrent::Promises::Future + #zip + Concurrent::Promises::Event
  • - #zip - Concurrent::Promises::Event + #zip + Concurrent::Promises::Future
  • From 7ed73c896e944dd8909e962677e5f057490a5a18 Mon Sep 17 00:00:00 2001 From: Petr Chalupa Date: Sun, 17 Nov 2019 16:35:38 +0100 Subject: [PATCH 3/6] Update documentation --- docs-source/channel.out.md | 30 +- docs-source/erlang_actor.out.md | 2 +- docs-source/medium-example.out.rb | 869 ++++++---- docs/js/app.js | 11 + docs/master/Concurrent/Actor.html | 4 +- docs/master/Concurrent/Actor/Reference.html | 74 +- docs/master/Concurrent/Array.html | 13 +- docs/master/Concurrent/ErlangActor.html | 2 +- docs/master/Concurrent/Promises/Channel.html | 32 +- docs/master/Concurrent/Set.html | 13 +- .../Concurrent/SingleThreadExecutor.html | 80 +- docs/master/Concurrent/WrappingExecutor.html | 187 ++- docs/master/file.medium-example.out.html | 868 ++++++---- docs/master/js/app.js | 11 + docs/master/method_list.html | 1482 ++++++++--------- lib/concurrent/executor/wrapping_executor.rb | 26 +- 16 files changed, 2069 insertions(+), 1635 deletions(-) diff --git a/docs-source/channel.out.md b/docs-source/channel.out.md index efbb6e295..81afa6455 100644 --- a/docs-source/channel.out.md +++ b/docs-source/channel.out.md @@ -16,8 +16,8 @@ threads = Array.new(3) { |i| Thread.new { ch.push message: i } } sleep 0.01 # let the threads run threads # => [#, -# #, -# #] +# #, +# #] ``` When message is popped the last thread continues and finishes as well. @@ -45,7 +45,7 @@ threads ch.push message: 3 # => # threads.map(&:value) -# => [{:message=>1}, {:message=>2}, {:message=>3}] +# => [{:message=>2}, {:message=>1}, {:message=>3}] ``` ### Promises integration @@ -204,16 +204,16 @@ log # "producer 0 pushing 2", # "producer 1 pushing 0", # "consumer 0 got 0. payload 0 from producer 0", +# "producer 0 pushing 3", # "consumer 1 got 0. payload 1 from producer 0", +# "producer 1 pushing 1", # "consumer 2 got 0. payload 2 from producer 0", # "consumer 3 got 0. payload 0 from producer 1", -# "producer 0 pushing 3", -# "producer 1 pushing 1", # "producer 1 pushing 2", # "consumer 0 got 1. payload 3 from producer 0", -# "consumer 1 got 1. payload 1 from producer 1", -# "consumer 3 got 1. payload 2 from producer 1", # "producer 1 pushing 3", +# "consumer 3 got 1. payload 1 from producer 1", +# "consumer 1 got 1. payload 2 from producer 1", # "consumer 2 got 1. payload 3 from producer 1"] ``` @@ -268,20 +268,20 @@ consumers.map(&:value!) # => [:done, :done, :done, :done] # investigate log log # => ["producer 0 pushing 0", -# "producer 1 pushing 0", # "producer 0 pushing 1", +# "producer 1 pushing 0", +# "consumer 1 got 0. payload 1 from producer 0", +# "producer 0 pushing 2", +# "producer 0 pushing 3", # "producer 1 pushing 1", # "consumer 0 got 0. payload 0 from producer 0", -# "consumer 1 got 0. payload 0 from producer 1", -# "consumer 2 got 0. payload 1 from producer 0", -# "producer 0 pushing 2", -# "consumer 3 got 0. payload 1 from producer 1", +# "consumer 2 got 0. payload 0 from producer 1", # "producer 1 pushing 2", -# "producer 0 pushing 3", +# "consumer 3 got 0. payload 2 from producer 0", # "producer 1 pushing 3", -# "consumer 0 got 1. payload 2 from producer 0", -# "consumer 2 got 1. payload 2 from producer 1", # "consumer 1 got 1. payload 3 from producer 0", +# "consumer 0 got 1. payload 1 from producer 1", +# "consumer 2 got 1. payload 2 from producer 1", # "consumer 3 got 1. payload 3 from producer 1"] ``` diff --git a/docs-source/erlang_actor.out.md b/docs-source/erlang_actor.out.md index d4be69ba0..f062557a4 100644 --- a/docs-source/erlang_actor.out.md +++ b/docs-source/erlang_actor.out.md @@ -5,7 +5,7 @@ Although, `Promises.future { 1 + 1 }` is better suited for that purpose. ```ruby actor = Concurrent::ErlangActor.spawn(type: :on_thread, name: 'addition') { 1 + 1 } -# => # +# => # actor.terminated.value! # => 2 ``` diff --git a/docs-source/medium-example.out.rb b/docs-source/medium-example.out.rb index a051f51ab..3dc8dd4a9 100644 --- a/docs-source/medium-example.out.rb +++ b/docs-source/medium-example.out.rb @@ -87,8 +87,8 @@ sleep 0.05 # the logging is asynchronous, we need to wait a bit until it's written get_captured_output -# => "[2019-03-11 10:15:11.819] FATAL -- : :tornado\n" + -# "[2019-03-11 10:15:11.820] INFO -- : :breeze\n" +# => "[2019-11-17 16:32:03.468] FATAL -- : :tornado\n" + +# "[2019-11-17 16:32:03.469] INFO -- : :breeze\n" # the logging could be wrapped in a method def log(severity, message) @@ -100,7 +100,7 @@ def log(severity, message) log INFO, 'alive' # => true sleep 0.05 # => 0 get_captured_output -# => "[2019-03-11 10:15:11.871] INFO -- : alive\n" +# => "[2019-11-17 16:32:03.520] INFO -- : alive\n" # The stub which will represent the web @@ -162,9 +162,9 @@ def self.search end end end.freeze -# => [#, -# #, -# #, +# => [#, +# #, +# #, # #] # So far only the crawlers looking for data are defined @@ -347,372 +347,517 @@ def readout(crawler_data_counter) # inspect collected char frequencies DB.data -# => {"1"=>18, -# "2"=>18, +# => {"2"=>18, +# "1"=>18, # "3"=>18, # "4"=>18, -# "6"=>18, -# "5"=>18, # "7"=>18, +# "5"=>18, +# "6"=>18, # "8"=>18, # "9"=>18, -# "b"=>1, -# "c"=>1, -# "a"=>7, -# "d"=>1, -# "e"=>1, +# "a"=>18, +# "b"=>18, +# "c"=>18, +# "d"=>18, +# "e"=>10, # "f"=>1} # see the logger output get_captured_output -# => "[2019-03-11 10:15:11.939] DEBUG -- : crawler 2 found 1\n" + -# "[2019-03-11 10:15:11.941] DEBUG -- : crawler 1 found 2\n" + -# "[2019-03-11 10:15:11.942] DEBUG -- : data-processor 0 got 1\n" + -# "[2019-03-11 10:15:11.943] DEBUG -- : data-processor 1 got 2\n" + -# "[2019-03-11 10:15:11.944] DEBUG -- : crawler 0 found 3\n" + -# "[2019-03-11 10:15:11.944] DEBUG -- : data-processor 2 got 3\n" + -# "[2019-03-11 10:15:11.945] DEBUG -- : crawler 3 found 4\n" + -# "[2019-03-11 10:15:11.946] DEBUG -- : data-processor 3 got 4\n" + -# "[2019-03-11 10:15:11.951] DEBUG -- : crawler 2 found 5\n" + -# "[2019-03-11 10:15:11.952] DEBUG -- : crawler 1 found 6\n" + -# "[2019-03-11 10:15:11.953] DEBUG -- : data-processor 4 got 5\n" + -# "[2019-03-11 10:15:11.954] DEBUG -- : data-processor 5 got 6\n" + -# "[2019-03-11 10:15:11.955] DEBUG -- : crawler 0 found 7\n" + -# "[2019-03-11 10:15:11.956] DEBUG -- : data-processor 6 got 7\n" + -# "[2019-03-11 10:15:11.956] DEBUG -- : crawler 3 found 8\n" + -# "[2019-03-11 10:15:11.957] DEBUG -- : data-processor 7 got 8\n" + -# "[2019-03-11 10:15:11.962] DEBUG -- : crawler 2 found 9\n" + -# "[2019-03-11 10:15:11.964] DEBUG -- : crawler 1 found a\n" + -# "[2019-03-11 10:15:11.964] DEBUG -- : crawler 0 found b\n" + -# "[2019-03-11 10:15:11.965] DEBUG -- : crawler 3 found c\n" + -# "[2019-03-11 10:15:11.973] DEBUG -- : crawler 2 found d\n" + -# "[2019-03-11 10:15:11.974] DEBUG -- : crawler 1 found e\n" + -# "[2019-03-11 10:15:11.975] DEBUG -- : crawler 3 found f\n" + -# "[2019-03-11 10:15:11.977] DEBUG -- : crawler 0 found 10\n" + -# "[2019-03-11 10:15:11.986] DEBUG -- : crawler 2 found 11\n" + -# "[2019-03-11 10:15:11.987] DEBUG -- : crawler 1 found 12\n" + -# "[2019-03-11 10:15:11.988] DEBUG -- : crawler 3 found 13\n" + -# "[2019-03-11 10:15:11.989] DEBUG -- : crawler 0 found 14\n" + -# "[2019-03-11 10:15:11.997] DEBUG -- : crawler 2 found 15\n" + -# "[2019-03-11 10:15:11.998] DEBUG -- : crawler 1 found 16\n" + -# "[2019-03-11 10:15:11.999] DEBUG -- : crawler 3 found 17\n" + -# "[2019-03-11 10:15:12.000] DEBUG -- : crawler 0 found 18\n" + -# "[2019-03-11 10:15:12.010] DEBUG -- : crawler 2 found 19\n" + -# "[2019-03-11 10:15:12.011] DEBUG -- : crawler 1 found 1a\n" + -# "[2019-03-11 10:15:12.012] DEBUG -- : crawler 3 found 1b\n" + -# "[2019-03-11 10:15:12.014] DEBUG -- : crawler 0 found 1c\n" + -# "[2019-03-11 10:15:12.022] DEBUG -- : crawler 2 found 1d\n" + -# "[2019-03-11 10:15:12.023] DEBUG -- : crawler 1 found 1e\n" + -# "[2019-03-11 10:15:12.044] DEBUG -- : data-processor 8 got 9\n" + -# "[2019-03-11 10:15:12.046] DEBUG -- : data-processor 9 got a\n" + -# "[2019-03-11 10:15:12.047] DEBUG -- : data-processor 10 got b\n" + -# "[2019-03-11 10:15:12.048] DEBUG -- : data-processor 11 got c\n" + -# "[2019-03-11 10:15:12.056] DEBUG -- : data-processor 12 got d\n" + -# "[2019-03-11 10:15:12.057] DEBUG -- : data-processor 13 got e\n" + -# "[2019-03-11 10:15:12.058] DEBUG -- : data-processor 14 got f\n" + -# "[2019-03-11 10:15:12.061] DEBUG -- : data-processor 15 got 10\n" + -# "[2019-03-11 10:15:12.149] DEBUG -- : data-processor 16 got 11\n" + -# "[2019-03-11 10:15:12.151] DEBUG -- : data-processor 17 got 12\n" + -# "[2019-03-11 10:15:12.152] DEBUG -- : data-processor 18 got 13\n" + -# "[2019-03-11 10:15:12.153] DEBUG -- : data-processor 19 got 14\n" + -# "[2019-03-11 10:15:12.163] DEBUG -- : data-processor 0 got 15\n" + -# "[2019-03-11 10:15:12.164] DEBUG -- : crawler 3 found 1f\n" + -# "[2019-03-11 10:15:12.165] DEBUG -- : crawler 0 found 20\n" + -# "[2019-03-11 10:15:12.166] DEBUG -- : crawler 1 found 22\n" + -# "[2019-03-11 10:15:12.167] DEBUG -- : crawler 2 found 21\n" + -# "[2019-03-11 10:15:12.167] DEBUG -- : data-processor 1 got 16\n" + -# "[2019-03-11 10:15:12.168] DEBUG -- : data-processor 2 got 17\n" + -# "[2019-03-11 10:15:12.169] DEBUG -- : data-processor 3 got 18\n" + -# "[2019-03-11 10:15:12.174] DEBUG -- : crawler 3 found 23\n" + -# "[2019-03-11 10:15:12.174] DEBUG -- : crawler 0 found 24\n" + -# "[2019-03-11 10:15:12.175] DEBUG -- : crawler 2 found 25\n" + -# "[2019-03-11 10:15:12.176] DEBUG -- : crawler 1 found 26\n" + -# "[2019-03-11 10:15:12.185] DEBUG -- : crawler 3 found 27\n" + -# "[2019-03-11 10:15:12.185] DEBUG -- : crawler 1 found 28\n" + -# "[2019-03-11 10:15:12.186] DEBUG -- : crawler 2 found 29\n" + -# "[2019-03-11 10:15:12.187] DEBUG -- : crawler 0 found 2a\n" + -# "[2019-03-11 10:15:12.254] DEBUG -- : data-processor 5 got 19\n" + -# "[2019-03-11 10:15:12.255] DEBUG -- : data-processor 4 got 1a\n" + -# "[2019-03-11 10:15:12.256] DEBUG -- : data-processor 6 got 1b\n" + -# "[2019-03-11 10:15:12.258] DEBUG -- : data-processor 7 got 1c\n" + -# "[2019-03-11 10:15:12.267] DEBUG -- : data-processor 8 got 1d\n" + -# "[2019-03-11 10:15:12.268] DEBUG -- : data-processor 10 got 1e\n" + -# "[2019-03-11 10:15:12.269] DEBUG -- : data-processor 11 got 1f\n" + -# "[2019-03-11 10:15:12.269] DEBUG -- : data-processor 9 got 20\n" + -# "[2019-03-11 10:15:12.336] INFO -- : \n" + -# "crawlers found: 10, 11, 11, 10\n" + -# "data processors consumed: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1\n" + -# "[2019-03-11 10:15:12.361] DEBUG -- : data-processor 12 got 22\n" + -# "[2019-03-11 10:15:12.362] DEBUG -- : data-processor 13 got 21\n" + -# "[2019-03-11 10:15:12.363] DEBUG -- : data-processor 14 got 23\n" + -# "[2019-03-11 10:15:12.363] DEBUG -- : data-processor 15 got 24\n" + -# "[2019-03-11 10:15:12.364] DEBUG -- : crawler 3 found 2b\n" + -# "[2019-03-11 10:15:12.365] DEBUG -- : crawler 1 found 2c\n" + -# "[2019-03-11 10:15:12.365] DEBUG -- : crawler 0 found 2e\n" + -# "[2019-03-11 10:15:12.366] DEBUG -- : crawler 2 found 2d\n" + -# "[2019-03-11 10:15:12.371] DEBUG -- : data-processor 16 got 25\n" + -# "[2019-03-11 10:15:12.371] DEBUG -- : data-processor 17 got 26\n" + -# "[2019-03-11 10:15:12.372] DEBUG -- : data-processor 18 got 27\n" + -# "[2019-03-11 10:15:12.373] DEBUG -- : data-processor 19 got 28\n" + -# "[2019-03-11 10:15:12.374] DEBUG -- : crawler 3 found 2f\n" + -# "[2019-03-11 10:15:12.374] DEBUG -- : crawler 2 found 30\n" + -# "[2019-03-11 10:15:12.375] DEBUG -- : crawler 0 found 31\n" + -# "[2019-03-11 10:15:12.376] DEBUG -- : crawler 1 found 32\n" + -# "[2019-03-11 10:15:12.383] DEBUG -- : crawler 3 found 33\n" + -# "[2019-03-11 10:15:12.384] DEBUG -- : crawler 2 found 34\n" + -# "[2019-03-11 10:15:12.385] DEBUG -- : crawler 0 found 35\n" + -# "[2019-03-11 10:15:12.385] DEBUG -- : crawler 1 found 36\n" + -# "[2019-03-11 10:15:12.465] DEBUG -- : data-processor 1 got 29\n" + -# "[2019-03-11 10:15:12.465] DEBUG -- : data-processor 2 got 2a\n" + -# "[2019-03-11 10:15:12.467] DEBUG -- : data-processor 3 got 2b\n" + -# "[2019-03-11 10:15:12.468] DEBUG -- : data-processor 0 got 2c\n" + -# "[2019-03-11 10:15:12.479] DEBUG -- : data-processor 4 got 2e\n" + -# "[2019-03-11 10:15:12.481] DEBUG -- : data-processor 6 got 2d\n" + -# "[2019-03-11 10:15:12.482] DEBUG -- : crawler 3 found 37\n" + -# "[2019-03-11 10:15:12.483] DEBUG -- : crawler 2 found 38\n" + -# "[2019-03-11 10:15:12.484] DEBUG -- : crawler 0 found 39\n" + -# "[2019-03-11 10:15:12.484] DEBUG -- : data-processor 7 got 2f\n" + -# "[2019-03-11 10:15:12.485] DEBUG -- : data-processor 5 got 30\n" + -# "[2019-03-11 10:15:12.486] DEBUG -- : crawler 1 found 3a\n" + -# "[2019-03-11 10:15:12.491] DEBUG -- : crawler 3 found 3b\n" + -# "[2019-03-11 10:15:12.492] DEBUG -- : crawler 2 found 3c\n" + -# "[2019-03-11 10:15:12.493] DEBUG -- : crawler 0 found 3d\n" + -# "[2019-03-11 10:15:12.494] DEBUG -- : crawler 1 found 3e\n" + -# "[2019-03-11 10:15:12.503] DEBUG -- : crawler 2 found 3f\n" + -# "[2019-03-11 10:15:12.504] DEBUG -- : crawler 3 found 40\n" + -# "[2019-03-11 10:15:12.506] DEBUG -- : crawler 0 found 41\n" + -# "[2019-03-11 10:15:12.507] DEBUG -- : crawler 1 found 42\n" + -# "[2019-03-11 10:15:12.568] DEBUG -- : data-processor 8 got 31\n" + -# "[2019-03-11 10:15:12.570] DEBUG -- : data-processor 11 got 32\n" + -# "[2019-03-11 10:15:12.571] DEBUG -- : data-processor 9 got 33\n" + -# "[2019-03-11 10:15:12.572] DEBUG -- : data-processor 10 got 34\n" + -# "[2019-03-11 10:15:12.583] DEBUG -- : data-processor 13 got 35\n" + -# "[2019-03-11 10:15:12.585] DEBUG -- : data-processor 15 got 36\n" + -# "[2019-03-11 10:15:12.586] DEBUG -- : data-processor 14 got 37\n" + -# "[2019-03-11 10:15:12.587] DEBUG -- : data-processor 12 got 38\n" + -# "[2019-03-11 10:15:12.675] DEBUG -- : data-processor 19 got 39\n" + -# "[2019-03-11 10:15:12.676] DEBUG -- : crawler 2 found 43\n" + -# "[2019-03-11 10:15:12.677] DEBUG -- : crawler 0 found 45\n" + -# "[2019-03-11 10:15:12.678] DEBUG -- : crawler 3 found 44\n" + -# "[2019-03-11 10:15:12.679] DEBUG -- : data-processor 17 got 3a\n" + -# "[2019-03-11 10:15:12.679] DEBUG -- : data-processor 16 got 3b\n" + -# "[2019-03-11 10:15:12.680] DEBUG -- : data-processor 18 got 3c\n" + -# "[2019-03-11 10:15:12.681] DEBUG -- : crawler 1 found 46\n" + -# "[2019-03-11 10:15:12.688] DEBUG -- : crawler 0 found 47\n" + -# "[2019-03-11 10:15:12.690] DEBUG -- : data-processor 2 got 3d\n" + -# "[2019-03-11 10:15:12.690] DEBUG -- : data-processor 1 got 3e\n" + -# "[2019-03-11 10:15:12.691] DEBUG -- : crawler 1 found 48\n" + -# "[2019-03-11 10:15:12.692] DEBUG -- : crawler 3 found 49\n" + -# "[2019-03-11 10:15:12.693] DEBUG -- : data-processor 0 got 3f\n" + -# "[2019-03-11 10:15:12.693] DEBUG -- : crawler 2 found 4a\n" + -# "[2019-03-11 10:15:12.694] DEBUG -- : data-processor 3 got 40\n" + -# "[2019-03-11 10:15:12.700] DEBUG -- : crawler 0 found 4b\n" + -# "[2019-03-11 10:15:12.701] DEBUG -- : crawler 1 found 4c\n" + -# "[2019-03-11 10:15:12.702] DEBUG -- : crawler 3 found 4d\n" + -# "[2019-03-11 10:15:12.702] DEBUG -- : crawler 2 found 4e\n" + -# "[2019-03-11 10:15:12.743] INFO -- : \n" + -# "crawlers found: 19, 20, 20, 19\n" + -# "data processors consumed: 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3\n" + -# "[2019-03-11 10:15:12.780] DEBUG -- : data-processor 4 got 41\n" + -# "[2019-03-11 10:15:12.782] DEBUG -- : data-processor 7 got 42\n" + -# "[2019-03-11 10:15:12.783] DEBUG -- : data-processor 5 got 43\n" + -# "[2019-03-11 10:15:12.783] DEBUG -- : data-processor 6 got 45\n" + -# "[2019-03-11 10:15:12.793] DEBUG -- : data-processor 11 got 46\n" + -# "[2019-03-11 10:15:12.794] DEBUG -- : data-processor 9 got 44\n" + -# "[2019-03-11 10:15:12.795] DEBUG -- : data-processor 10 got 47\n" + -# "[2019-03-11 10:15:12.796] DEBUG -- : crawler 0 found 4f\n" + -# "[2019-03-11 10:15:12.797] DEBUG -- : crawler 1 found 50\n" + -# "[2019-03-11 10:15:12.797] DEBUG -- : crawler 2 found 51\n" + -# "[2019-03-11 10:15:12.798] DEBUG -- : crawler 3 found 52\n" + -# "[2019-03-11 10:15:12.799] DEBUG -- : data-processor 8 got 48\n" + -# "[2019-03-11 10:15:12.806] DEBUG -- : crawler 0 found 53\n" + -# "[2019-03-11 10:15:12.807] DEBUG -- : crawler 1 found 54\n" + -# "[2019-03-11 10:15:12.808] DEBUG -- : crawler 3 found 55\n" + -# "[2019-03-11 10:15:12.808] DEBUG -- : crawler 2 found 56\n" + -# "[2019-03-11 10:15:12.816] DEBUG -- : crawler 2 found 57\n" + -# "[2019-03-11 10:15:12.817] DEBUG -- : crawler 1 found 58\n" + -# "[2019-03-11 10:15:12.818] DEBUG -- : crawler 0 found 59\n" + -# "[2019-03-11 10:15:12.819] DEBUG -- : crawler 3 found 5a\n" + -# "[2019-03-11 10:15:12.883] DEBUG -- : data-processor 12 got 49\n" + -# "[2019-03-11 10:15:12.884] DEBUG -- : data-processor 15 got 4a\n" + -# "[2019-03-11 10:15:12.885] DEBUG -- : data-processor 14 got 4b\n" + -# "[2019-03-11 10:15:12.886] DEBUG -- : data-processor 13 got 4c\n" + -# "[2019-03-11 10:15:12.897] DEBUG -- : data-processor 19 got 4d\n" + -# "[2019-03-11 10:15:12.898] DEBUG -- : data-processor 18 got 4e\n" + -# "[2019-03-11 10:15:12.899] DEBUG -- : data-processor 17 got 4f\n" + -# "[2019-03-11 10:15:12.900] DEBUG -- : data-processor 16 got 50\n" + -# "[2019-03-11 10:15:12.989] DEBUG -- : data-processor 0 got 51\n" + -# "[2019-03-11 10:15:12.991] DEBUG -- : data-processor 2 got 52\n" + -# "[2019-03-11 10:15:12.992] DEBUG -- : crawler 2 found 5b\n" + -# "[2019-03-11 10:15:12.993] DEBUG -- : crawler 1 found 5c\n" + -# "[2019-03-11 10:15:12.994] DEBUG -- : crawler 0 found 5e\n" + -# "[2019-03-11 10:15:12.994] DEBUG -- : crawler 3 found 5d\n" + -# "[2019-03-11 10:15:12.995] DEBUG -- : data-processor 1 got 53\n" + -# "[2019-03-11 10:15:12.996] DEBUG -- : data-processor 3 got 54\n" + -# "[2019-03-11 10:15:13.001] DEBUG -- : data-processor 7 got 55\n" + -# "[2019-03-11 10:15:13.002] DEBUG -- : data-processor 4 got 56\n" + -# "[2019-03-11 10:15:13.003] DEBUG -- : crawler 2 found 5f\n" + -# "[2019-03-11 10:15:13.004] DEBUG -- : crawler 1 found 60\n" + -# "[2019-03-11 10:15:13.004] DEBUG -- : crawler 0 found 61\n" + -# "[2019-03-11 10:15:13.005] DEBUG -- : crawler 3 found 62\n" + -# "[2019-03-11 10:15:13.006] DEBUG -- : data-processor 5 got 57\n" + -# "[2019-03-11 10:15:13.007] DEBUG -- : data-processor 6 got 58\n" + -# "[2019-03-11 10:15:13.011] DEBUG -- : crawler 2 found 63\n" + -# "[2019-03-11 10:15:13.012] DEBUG -- : crawler 1 found 64\n" + -# "[2019-03-11 10:15:13.013] DEBUG -- : crawler 0 found 65\n" + -# "[2019-03-11 10:15:13.013] DEBUG -- : crawler 3 found 66\n" + -# "[2019-03-11 10:15:13.091] DEBUG -- : data-processor 11 got 59\n" + -# "[2019-03-11 10:15:13.092] DEBUG -- : data-processor 10 got 5a\n" + -# "[2019-03-11 10:15:13.093] DEBUG -- : data-processor 8 got 5b\n" + -# "[2019-03-11 10:15:13.094] DEBUG -- : data-processor 9 got 5c\n" + -# "[2019-03-11 10:15:13.104] DEBUG -- : data-processor 12 got 5e\n" + -# "[2019-03-11 10:15:13.106] DEBUG -- : crawler 1 found 67\n" + -# "[2019-03-11 10:15:13.106] DEBUG -- : crawler 2 found 68\n" + -# "[2019-03-11 10:15:13.107] DEBUG -- : crawler 0 found 69\n" + -# "[2019-03-11 10:15:13.108] DEBUG -- : crawler 3 found 6a\n" + -# "[2019-03-11 10:15:13.108] DEBUG -- : data-processor 15 got 5d\n" + -# "[2019-03-11 10:15:13.109] DEBUG -- : data-processor 13 got 5f\n" + -# "[2019-03-11 10:15:13.110] DEBUG -- : data-processor 14 got 60\n" + -# "[2019-03-11 10:15:13.116] DEBUG -- : crawler 1 found 6b\n" + -# "[2019-03-11 10:15:13.117] DEBUG -- : crawler 2 found 6c\n" + -# "[2019-03-11 10:15:13.117] DEBUG -- : crawler 0 found 6d\n" + -# "[2019-03-11 10:15:13.118] DEBUG -- : crawler 3 found 6e\n" + -# "[2019-03-11 10:15:13.128] DEBUG -- : crawler 1 found 6f\n" + -# "[2019-03-11 10:15:13.129] DEBUG -- : crawler 2 found 70\n" + -# "[2019-03-11 10:15:13.130] DEBUG -- : crawler 3 found 71\n" + -# "[2019-03-11 10:15:13.131] DEBUG -- : crawler 0 found 72\n" + -# "[2019-03-11 10:15:13.147] INFO -- : \n" + -# "crawlers found: 28, 29, 29, 28\n" + +# => "[2019-11-17 16:32:03.596] DEBUG -- : crawler 0 found 1\n" + +# "[2019-11-17 16:32:03.597] DEBUG -- : crawler 2 found 2\n" + +# "[2019-11-17 16:32:03.597] DEBUG -- : data-processor 1 got 2\n" + +# "[2019-11-17 16:32:03.598] DEBUG -- : crawler 1 found 3\n" + +# "[2019-11-17 16:32:03.598] DEBUG -- : crawler 3 found 4\n" + +# "[2019-11-17 16:32:03.599] DEBUG -- : data-processor 0 got 1\n" + +# "[2019-11-17 16:32:03.599] DEBUG -- : data-processor 2 got 3\n" + +# "[2019-11-17 16:32:03.600] DEBUG -- : data-processor 3 got 4\n" + +# "[2019-11-17 16:32:03.608] DEBUG -- : crawler 2 found 5\n" + +# "[2019-11-17 16:32:03.608] DEBUG -- : data-processor 4 got 5\n" + +# "[2019-11-17 16:32:03.609] DEBUG -- : crawler 0 found 6\n" + +# "[2019-11-17 16:32:03.609] DEBUG -- : crawler 1 found 7\n" + +# "[2019-11-17 16:32:03.609] DEBUG -- : data-processor 6 got 7\n" + +# "[2019-11-17 16:32:03.610] DEBUG -- : crawler 3 found 8\n" + +# "[2019-11-17 16:32:03.610] DEBUG -- : data-processor 5 got 6\n" + +# "[2019-11-17 16:32:03.611] DEBUG -- : data-processor 7 got 8\n" + +# "[2019-11-17 16:32:03.622] DEBUG -- : crawler 2 found 9\n" + +# "[2019-11-17 16:32:03.622] DEBUG -- : crawler 0 found a\n" + +# "[2019-11-17 16:32:03.623] DEBUG -- : crawler 1 found b\n" + +# "[2019-11-17 16:32:03.624] DEBUG -- : crawler 3 found c\n" + +# "[2019-11-17 16:32:03.624] DEBUG -- : data-processor 8 got 9\n" + +# "[2019-11-17 16:32:03.625] DEBUG -- : data-processor 9 got a\n" + +# "[2019-11-17 16:32:03.625] DEBUG -- : data-processor 10 got b\n" + +# "[2019-11-17 16:32:03.625] DEBUG -- : data-processor 11 got c\n" + +# "[2019-11-17 16:32:03.632] DEBUG -- : crawler 2 found d\n" + +# "[2019-11-17 16:32:03.633] DEBUG -- : crawler 0 found e\n" + +# "[2019-11-17 16:32:03.633] DEBUG -- : crawler 1 found f\n" + +# "[2019-11-17 16:32:03.633] DEBUG -- : crawler 3 found 10\n" + +# "[2019-11-17 16:32:03.643] DEBUG -- : crawler 3 found 11\n" + +# "[2019-11-17 16:32:03.644] DEBUG -- : crawler 2 found 12\n" + +# "[2019-11-17 16:32:03.645] DEBUG -- : crawler 0 found 13\n" + +# "[2019-11-17 16:32:03.645] DEBUG -- : crawler 1 found 14\n" + +# "[2019-11-17 16:32:03.654] DEBUG -- : crawler 2 found 15\n" + +# "[2019-11-17 16:32:03.654] DEBUG -- : crawler 3 found 16\n" + +# "[2019-11-17 16:32:03.655] DEBUG -- : crawler 0 found 17\n" + +# "[2019-11-17 16:32:03.656] DEBUG -- : crawler 1 found 18\n" + +# "[2019-11-17 16:32:03.664] DEBUG -- : crawler 2 found 19\n" + +# "[2019-11-17 16:32:03.667] DEBUG -- : crawler 3 found 1a\n" + +# "[2019-11-17 16:32:03.668] DEBUG -- : crawler 0 found 1b\n" + +# "[2019-11-17 16:32:03.669] DEBUG -- : crawler 1 found 1c\n" + +# "[2019-11-17 16:32:03.675] DEBUG -- : crawler 2 found 1d\n" + +# "[2019-11-17 16:32:03.680] DEBUG -- : crawler 3 found 1e\n" + +# "[2019-11-17 16:32:03.697] DEBUG -- : data-processor 12 got d\n" + +# "[2019-11-17 16:32:03.698] DEBUG -- : data-processor 13 got e\n" + +# "[2019-11-17 16:32:03.699] DEBUG -- : data-processor 14 got f\n" + +# "[2019-11-17 16:32:03.699] DEBUG -- : data-processor 15 got 10\n" + +# "[2019-11-17 16:32:03.710] DEBUG -- : data-processor 16 got 11\n" + +# "[2019-11-17 16:32:03.710] DEBUG -- : data-processor 17 got 12\n" + +# "[2019-11-17 16:32:03.714] DEBUG -- : data-processor 18 got 13\n" + +# "[2019-11-17 16:32:03.714] DEBUG -- : data-processor 19 got 14\n" + +# "[2019-11-17 16:32:03.723] DEBUG -- : data-processor 1 got 15\n" + +# "[2019-11-17 16:32:03.724] DEBUG -- : crawler 0 found 1f\n" + +# "[2019-11-17 16:32:03.724] DEBUG -- : crawler 1 found 20\n" + +# "[2019-11-17 16:32:03.725] DEBUG -- : crawler 2 found 21\n" + +# "[2019-11-17 16:32:03.725] DEBUG -- : crawler 3 found 22\n" + +# "[2019-11-17 16:32:03.727] DEBUG -- : data-processor 0 got 16\n" + +# "[2019-11-17 16:32:03.727] DEBUG -- : data-processor 2 got 17\n" + +# "[2019-11-17 16:32:03.728] DEBUG -- : data-processor 3 got 18\n" + +# "[2019-11-17 16:32:03.734] DEBUG -- : crawler 0 found 23\n" + +# "[2019-11-17 16:32:03.734] DEBUG -- : crawler 1 found 24\n" + +# "[2019-11-17 16:32:03.735] DEBUG -- : crawler 2 found 25\n" + +# "[2019-11-17 16:32:03.736] DEBUG -- : crawler 3 found 26\n" + +# "[2019-11-17 16:32:03.802] DEBUG -- : data-processor 6 got 19\n" + +# "[2019-11-17 16:32:03.803] DEBUG -- : data-processor 4 got 1a\n" + +# "[2019-11-17 16:32:03.803] DEBUG -- : data-processor 5 got 1b\n" + +# "[2019-11-17 16:32:03.804] DEBUG -- : data-processor 7 got 1c\n" + +# "[2019-11-17 16:32:03.816] DEBUG -- : data-processor 8 got 1d\n" + +# "[2019-11-17 16:32:03.817] DEBUG -- : data-processor 9 got 1e\n" + +# "[2019-11-17 16:32:03.817] DEBUG -- : data-processor 10 got 1f\n" + +# "[2019-11-17 16:32:03.817] DEBUG -- : data-processor 11 got 20\n" + +# "[2019-11-17 16:32:03.818] DEBUG -- : crawler 0 found 27\n" + +# "[2019-11-17 16:32:03.818] DEBUG -- : crawler 1 found 28\n" + +# "[2019-11-17 16:32:03.818] DEBUG -- : crawler 2 found 29\n" + +# "[2019-11-17 16:32:03.819] DEBUG -- : crawler 3 found 2a\n" + +# "[2019-11-17 16:32:03.828] DEBUG -- : data-processor 12 got 21\n" + +# "[2019-11-17 16:32:03.829] DEBUG -- : crawler 1 found 2b\n" + +# "[2019-11-17 16:32:03.829] DEBUG -- : crawler 2 found 2c\n" + +# "[2019-11-17 16:32:03.830] DEBUG -- : crawler 3 found 2d\n" + +# "[2019-11-17 16:32:03.830] DEBUG -- : crawler 0 found 2e\n" + +# "[2019-11-17 16:32:03.831] DEBUG -- : data-processor 13 got 22\n" + +# "[2019-11-17 16:32:03.832] DEBUG -- : data-processor 14 got 23\n" + +# "[2019-11-17 16:32:03.832] DEBUG -- : data-processor 15 got 24\n" + +# "[2019-11-17 16:32:03.907] DEBUG -- : data-processor 17 got 25\n" + +# "[2019-11-17 16:32:03.908] DEBUG -- : data-processor 18 got 26\n" + +# "[2019-11-17 16:32:03.908] DEBUG -- : crawler 1 found 2f\n" + +# "[2019-11-17 16:32:03.909] DEBUG -- : crawler 2 found 30\n" + +# "[2019-11-17 16:32:03.909] DEBUG -- : crawler 3 found 31\n" + +# "[2019-11-17 16:32:03.910] DEBUG -- : crawler 0 found 32\n" + +# "[2019-11-17 16:32:03.910] DEBUG -- : data-processor 16 got 27\n" + +# "[2019-11-17 16:32:03.911] DEBUG -- : data-processor 19 got 28\n" + +# "[2019-11-17 16:32:03.918] DEBUG -- : crawler 1 found 33\n" + +# "[2019-11-17 16:32:03.919] DEBUG -- : crawler 2 found 34\n" + +# "[2019-11-17 16:32:03.923] DEBUG -- : crawler 3 found 35\n" + +# "[2019-11-17 16:32:03.923] DEBUG -- : crawler 0 found 36\n" + +# "[2019-11-17 16:32:03.924] DEBUG -- : data-processor 1 got 29\n" + +# "[2019-11-17 16:32:03.924] DEBUG -- : data-processor 0 got 2a\n" + +# "[2019-11-17 16:32:03.924] DEBUG -- : data-processor 2 got 2b\n" + +# "[2019-11-17 16:32:03.925] DEBUG -- : data-processor 3 got 2c\n" + +# "[2019-11-17 16:32:03.933] DEBUG -- : data-processor 4 got 2d\n" + +# "[2019-11-17 16:32:03.933] DEBUG -- : crawler 1 found 37\n" + +# "[2019-11-17 16:32:03.934] DEBUG -- : crawler 2 found 38\n" + +# "[2019-11-17 16:32:03.934] DEBUG -- : crawler 3 found 39\n" + +# "[2019-11-17 16:32:03.935] DEBUG -- : crawler 0 found 3a\n" + +# "[2019-11-17 16:32:03.935] DEBUG -- : data-processor 7 got 2e\n" + +# "[2019-11-17 16:32:03.936] DEBUG -- : data-processor 6 got 2f\n" + +# "[2019-11-17 16:32:03.936] DEBUG -- : data-processor 5 got 30\n" + +# "[2019-11-17 16:32:03.946] DEBUG -- : crawler 1 found 3b\n" + +# "[2019-11-17 16:32:03.947] DEBUG -- : crawler 2 found 3c\n" + +# "[2019-11-17 16:32:03.947] DEBUG -- : crawler 3 found 3d\n" + +# "[2019-11-17 16:32:03.948] DEBUG -- : crawler 0 found 3e\n" + +# "[2019-11-17 16:32:03.981] INFO -- : \n" + +# "crawlers found: 15, 15, 16, 16\n" + +# "data processors consumed: 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2\n" + +# "[2019-11-17 16:32:04.010] DEBUG -- : data-processor 8 got 31\n" + +# "[2019-11-17 16:32:04.011] DEBUG -- : data-processor 9 got 32\n" + +# "[2019-11-17 16:32:04.012] DEBUG -- : data-processor 10 got 33\n" + +# "[2019-11-17 16:32:04.012] DEBUG -- : data-processor 11 got 34\n" + +# "[2019-11-17 16:32:04.030] DEBUG -- : data-processor 12 got 35\n" + +# "[2019-11-17 16:32:04.031] DEBUG -- : data-processor 15 got 36\n" + +# "[2019-11-17 16:32:04.031] DEBUG -- : data-processor 13 got 37\n" + +# "[2019-11-17 16:32:04.032] DEBUG -- : data-processor 14 got 38\n" + +# "[2019-11-17 16:32:04.032] DEBUG -- : crawler 1 found 3f\n" + +# "[2019-11-17 16:32:04.032] DEBUG -- : crawler 2 found 40\n" + +# "[2019-11-17 16:32:04.033] DEBUG -- : crawler 3 found 41\n" + +# "[2019-11-17 16:32:04.033] DEBUG -- : crawler 0 found 42\n" + +# "[2019-11-17 16:32:04.038] DEBUG -- : data-processor 17 got 39\n" + +# "[2019-11-17 16:32:04.040] DEBUG -- : data-processor 16 got 3a\n" + +# "[2019-11-17 16:32:04.041] DEBUG -- : data-processor 18 got 3b\n" + +# "[2019-11-17 16:32:04.041] DEBUG -- : data-processor 19 got 3c\n" + +# "[2019-11-17 16:32:04.043] DEBUG -- : crawler 1 found 43\n" + +# "[2019-11-17 16:32:04.043] DEBUG -- : crawler 2 found 44\n" + +# "[2019-11-17 16:32:04.044] DEBUG -- : crawler 0 found 45\n" + +# "[2019-11-17 16:32:04.044] DEBUG -- : crawler 3 found 46\n" + +# "[2019-11-17 16:32:04.118] DEBUG -- : data-processor 2 got 3d\n" + +# "[2019-11-17 16:32:04.118] DEBUG -- : data-processor 3 got 3e\n" + +# "[2019-11-17 16:32:04.119] DEBUG -- : data-processor 1 got 3f\n" + +# "[2019-11-17 16:32:04.120] DEBUG -- : data-processor 0 got 40\n" + +# "[2019-11-17 16:32:04.120] DEBUG -- : crawler 1 found 47\n" + +# "[2019-11-17 16:32:04.121] DEBUG -- : crawler 2 found 48\n" + +# "[2019-11-17 16:32:04.122] DEBUG -- : crawler 0 found 49\n" + +# "[2019-11-17 16:32:04.123] DEBUG -- : crawler 3 found 4a\n" + +# "[2019-11-17 16:32:04.129] DEBUG -- : crawler 1 found 4b\n" + +# "[2019-11-17 16:32:04.130] DEBUG -- : crawler 2 found 4c\n" + +# "[2019-11-17 16:32:04.131] DEBUG -- : crawler 3 found 4d\n" + +# "[2019-11-17 16:32:04.131] DEBUG -- : crawler 0 found 4e\n" + +# "[2019-11-17 16:32:04.134] DEBUG -- : data-processor 4 got 41\n" + +# "[2019-11-17 16:32:04.135] DEBUG -- : data-processor 6 got 42\n" + +# "[2019-11-17 16:32:04.135] DEBUG -- : data-processor 7 got 43\n" + +# "[2019-11-17 16:32:04.136] DEBUG -- : data-processor 5 got 44\n" + +# "[2019-11-17 16:32:04.143] DEBUG -- : data-processor 9 got 45\n" + +# "[2019-11-17 16:32:04.143] DEBUG -- : crawler 3 found 52\n" + +# "[2019-11-17 16:32:04.145] DEBUG -- : crawler 1 found 4f\n" + +# "[2019-11-17 16:32:04.145] DEBUG -- : crawler 0 found 50\n" + +# "[2019-11-17 16:32:04.145] DEBUG -- : crawler 2 found 51\n" + +# "[2019-11-17 16:32:04.146] DEBUG -- : data-processor 11 got 46\n" + +# "[2019-11-17 16:32:04.146] DEBUG -- : data-processor 8 got 47\n" + +# "[2019-11-17 16:32:04.147] DEBUG -- : data-processor 10 got 48\n" + +# "[2019-11-17 16:32:04.155] DEBUG -- : crawler 3 found 53\n" + +# "[2019-11-17 16:32:04.156] DEBUG -- : crawler 1 found 54\n" + +# "[2019-11-17 16:32:04.156] DEBUG -- : crawler 0 found 55\n" + +# "[2019-11-17 16:32:04.157] DEBUG -- : crawler 2 found 56\n" + +# "[2019-11-17 16:32:04.221] DEBUG -- : data-processor 13 got 49\n" + +# "[2019-11-17 16:32:04.221] DEBUG -- : data-processor 12 got 4a\n" + +# "[2019-11-17 16:32:04.222] DEBUG -- : data-processor 15 got 4b\n" + +# "[2019-11-17 16:32:04.223] DEBUG -- : data-processor 14 got 4c\n" + +# "[2019-11-17 16:32:04.245] DEBUG -- : data-processor 17 got 4d\n" + +# "[2019-11-17 16:32:04.245] DEBUG -- : data-processor 18 got 4e\n" + +# "[2019-11-17 16:32:04.245] DEBUG -- : data-processor 16 got 4f\n" + +# "[2019-11-17 16:32:04.246] DEBUG -- : data-processor 19 got 50\n" + +# "[2019-11-17 16:32:04.246] DEBUG -- : crawler 3 found 57\n" + +# "[2019-11-17 16:32:04.247] DEBUG -- : crawler 1 found 58\n" + +# "[2019-11-17 16:32:04.247] DEBUG -- : crawler 0 found 59\n" + +# "[2019-11-17 16:32:04.248] DEBUG -- : crawler 2 found 5a\n" + +# "[2019-11-17 16:32:04.248] DEBUG -- : data-processor 1 got 51\n" + +# "[2019-11-17 16:32:04.248] DEBUG -- : data-processor 0 got 52\n" + +# "[2019-11-17 16:32:04.249] DEBUG -- : data-processor 2 got 53\n" + +# "[2019-11-17 16:32:04.249] DEBUG -- : data-processor 3 got 54\n" + +# "[2019-11-17 16:32:04.258] DEBUG -- : crawler 3 found 5b\n" + +# "[2019-11-17 16:32:04.259] DEBUG -- : crawler 1 found 5c\n" + +# "[2019-11-17 16:32:04.259] DEBUG -- : crawler 0 found 5d\n" + +# "[2019-11-17 16:32:04.260] DEBUG -- : crawler 2 found 5e\n" + +# "[2019-11-17 16:32:04.323] DEBUG -- : data-processor 7 got 55\n" + +# "[2019-11-17 16:32:04.324] DEBUG -- : data-processor 5 got 56\n" + +# "[2019-11-17 16:32:04.324] DEBUG -- : data-processor 4 got 57\n" + +# "[2019-11-17 16:32:04.325] DEBUG -- : crawler 3 found 5f\n" + +# "[2019-11-17 16:32:04.325] DEBUG -- : crawler 0 found 60\n" + +# "[2019-11-17 16:32:04.326] DEBUG -- : crawler 1 found 61\n" + +# "[2019-11-17 16:32:04.326] DEBUG -- : crawler 2 found 62\n" + +# "[2019-11-17 16:32:04.327] DEBUG -- : data-processor 6 got 58\n" + +# "[2019-11-17 16:32:04.336] DEBUG -- : crawler 3 found 63\n" + +# "[2019-11-17 16:32:04.337] DEBUG -- : crawler 0 found 64\n" + +# "[2019-11-17 16:32:04.338] DEBUG -- : crawler 1 found 65\n" + +# "[2019-11-17 16:32:04.338] DEBUG -- : crawler 2 found 66\n" + +# "[2019-11-17 16:32:04.348] DEBUG -- : data-processor 9 got 59\n" + +# "[2019-11-17 16:32:04.349] DEBUG -- : data-processor 11 got 5a\n" + +# "[2019-11-17 16:32:04.351] DEBUG -- : data-processor 8 got 5b\n" + +# "[2019-11-17 16:32:04.352] DEBUG -- : data-processor 10 got 5c\n" + +# "[2019-11-17 16:32:04.352] DEBUG -- : data-processor 13 got 5d\n" + +# "[2019-11-17 16:32:04.352] DEBUG -- : data-processor 12 got 5e\n" + +# "[2019-11-17 16:32:04.353] DEBUG -- : data-processor 15 got 5f\n" + +# "[2019-11-17 16:32:04.354] DEBUG -- : data-processor 14 got 60\n" + +# "[2019-11-17 16:32:04.354] DEBUG -- : crawler 2 found 67\n" + +# "[2019-11-17 16:32:04.355] DEBUG -- : crawler 1 found 68\n" + +# "[2019-11-17 16:32:04.355] DEBUG -- : crawler 3 found 69\n" + +# "[2019-11-17 16:32:04.356] DEBUG -- : crawler 0 found 6a\n" + +# "[2019-11-17 16:32:04.365] DEBUG -- : crawler 2 found 6b\n" + +# "[2019-11-17 16:32:04.366] DEBUG -- : crawler 1 found 6c\n" + +# "[2019-11-17 16:32:04.366] DEBUG -- : crawler 0 found 6d\n" + +# "[2019-11-17 16:32:04.367] DEBUG -- : crawler 3 found 6e\n" + +# "[2019-11-17 16:32:04.386] INFO -- : \n" + +# "crawlers found: 27, 27, 28, 28\n" + # "data processors consumed: 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4\n" + -# "[2019-03-11 10:15:13.195] DEBUG -- : data-processor 19 got 61\n" + -# "[2019-03-11 10:15:13.196] DEBUG -- : data-processor 16 got 62\n" + -# "[2019-03-11 10:15:13.197] DEBUG -- : data-processor 18 got 63\n" + -# "[2019-03-11 10:15:13.198] DEBUG -- : data-processor 17 got 64\n" + -# "[2019-03-11 10:15:13.207] DEBUG -- : data-processor 0 got 65\n" + -# "[2019-03-11 10:15:13.208] DEBUG -- : data-processor 1 got 66\n" + -# "[2019-03-11 10:15:13.211] DEBUG -- : data-processor 2 got 67\n" + -# "[2019-03-11 10:15:13.212] DEBUG -- : data-processor 3 got 68\n" + -# "[2019-03-11 10:15:13.302] DEBUG -- : data-processor 7 got 69\n" + -# "[2019-03-11 10:15:13.303] DEBUG -- : data-processor 4 got 6a\n" + -# "[2019-03-11 10:15:13.305] DEBUG -- : data-processor 6 got 6b\n" + -# "[2019-03-11 10:15:13.306] DEBUG -- : crawler 2 found 74\n" + -# "[2019-03-11 10:15:13.306] DEBUG -- : crawler 1 found 73\n" + -# "[2019-03-11 10:15:13.307] DEBUG -- : crawler 3 found 75\n" + -# "[2019-03-11 10:15:13.308] DEBUG -- : data-processor 5 got 6c\n" + -# "[2019-03-11 10:15:13.309] DEBUG -- : crawler 0 found 76\n" + -# "[2019-03-11 10:15:13.311] DEBUG -- : data-processor 11 got 6d\n" + -# "[2019-03-11 10:15:13.312] DEBUG -- : data-processor 9 got 6e\n" + -# "[2019-03-11 10:15:13.313] DEBUG -- : crawler 1 found 77\n" + -# "[2019-03-11 10:15:13.314] DEBUG -- : crawler 2 found 78\n" + -# "[2019-03-11 10:15:13.314] DEBUG -- : crawler 3 found 79\n" + -# "[2019-03-11 10:15:13.316] DEBUG -- : data-processor 10 got 6f\n" + -# "[2019-03-11 10:15:13.317] DEBUG -- : crawler 0 found 7a\n" + -# "[2019-03-11 10:15:13.318] DEBUG -- : data-processor 8 got 70\n" + -# "[2019-03-11 10:15:13.324] DEBUG -- : crawler 1 found 7b\n" + -# "[2019-03-11 10:15:13.325] DEBUG -- : crawler 3 found 7c\n" + -# "[2019-03-11 10:15:13.326] DEBUG -- : crawler 2 found 7d\n" + -# "[2019-03-11 10:15:13.327] DEBUG -- : crawler 0 found 7e\n" + -# "[2019-03-11 10:15:13.406] DEBUG -- : data-processor 12 got 71\n" + -# "[2019-03-11 10:15:13.407] DEBUG -- : data-processor 15 got 72\n" + -# "[2019-03-11 10:15:13.408] DEBUG -- : data-processor 13 got 74\n" + -# "[2019-03-11 10:15:13.409] DEBUG -- : data-processor 14 got 73\n" + -# "[2019-03-11 10:15:13.419] DEBUG -- : data-processor 16 got 76\n" + -# "[2019-03-11 10:15:13.420] DEBUG -- : data-processor 18 got 75\n" + -# "[2019-03-11 10:15:13.421] DEBUG -- : crawler 2 found 7f\n" + -# "[2019-03-11 10:15:13.422] DEBUG -- : crawler 3 found 80\n" + -# "[2019-03-11 10:15:13.423] DEBUG -- : crawler 1 found 81\n" + -# "[2019-03-11 10:15:13.424] DEBUG -- : crawler 0 found 82\n" + -# "[2019-03-11 10:15:13.424] DEBUG -- : data-processor 17 got 77\n" + -# "[2019-03-11 10:15:13.425] DEBUG -- : data-processor 19 got 78\n" + -# "[2019-03-11 10:15:13.430] DEBUG -- : crawler 2 found 83\n" + -# "[2019-03-11 10:15:13.431] DEBUG -- : crawler 3 found 84\n" + -# "[2019-03-11 10:15:13.431] DEBUG -- : crawler 1 found 85\n" + -# "[2019-03-11 10:15:13.432] DEBUG -- : crawler 0 found 86\n" + -# "[2019-03-11 10:15:13.441] DEBUG -- : crawler 2 found 87\n" + -# "[2019-03-11 10:15:13.442] DEBUG -- : crawler 1 found 88\n" + -# "[2019-03-11 10:15:13.443] DEBUG -- : crawler 3 found 89\n" + -# "[2019-03-11 10:15:13.443] DEBUG -- : crawler 0 found 8a\n" + -# "[2019-03-11 10:15:13.511] DEBUG -- : data-processor 0 got 79\n" + -# "[2019-03-11 10:15:13.513] DEBUG -- : data-processor 1 got 7a\n" + -# "[2019-03-11 10:15:13.514] DEBUG -- : data-processor 3 got 7b\n" + -# "[2019-03-11 10:15:13.515] DEBUG -- : data-processor 2 got 7c\n" + -# "[2019-03-11 10:15:13.524] DEBUG -- : data-processor 4 got 7d\n" + -# "[2019-03-11 10:15:13.525] DEBUG -- : data-processor 6 got 7e\n" + -# "[2019-03-11 10:15:13.526] DEBUG -- : data-processor 7 got 7f\n" + -# "[2019-03-11 10:15:13.526] DEBUG -- : data-processor 5 got 80\n" + -# "[2019-03-11 10:15:13.553] INFO -- : \n" + -# "crawlers found: 34, 35, 35, 34\n" + -# "data processors consumed: 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6\n" + -# "[2019-03-11 10:15:13.615] DEBUG -- : data-processor 11 got 81\n" + -# "[2019-03-11 10:15:13.617] DEBUG -- : data-processor 9 got 82\n" + -# "[2019-03-11 10:15:13.618] DEBUG -- : data-processor 8 got 83\n" + -# "[2019-03-11 10:15:13.618] DEBUG -- : crawler 2 found 8b\n" + -# "[2019-03-11 10:15:13.619] DEBUG -- : crawler 1 found 8c\n" + -# "[2019-03-11 10:15:13.620] DEBUG -- : crawler 0 found 8e\n" + -# "[2019-03-11 10:15:13.620] DEBUG -- : crawler 3 found 8d\n" + -# "[2019-03-11 10:15:13.621] DEBUG -- : data-processor 10 got 84\n" + -# "[2019-03-11 10:15:13.628] DEBUG -- : data-processor 13 got 85\n" + -# "[2019-03-11 10:15:13.629] DEBUG -- : data-processor 12 got 86\n" + -# "[2019-03-11 10:15:13.629] DEBUG -- : data-processor 15 got 87\n" + -# "[2019-03-11 10:15:13.630] DEBUG -- : data-processor 14 got 88\n" + -# "[2019-03-11 10:15:13.631] DEBUG -- : crawler 2 found 8f\n" + -# "[2019-03-11 10:15:13.631] DEBUG -- : crawler 1 found 90\n" + -# "[2019-03-11 10:15:13.632] DEBUG -- : crawler 3 found 91\n" + -# "[2019-03-11 10:15:13.633] DEBUG -- : crawler 0 found 92\n" + -# "[2019-03-11 10:15:13.640] DEBUG -- : crawler 2 found 93\n" + -# "[2019-03-11 10:15:13.640] DEBUG -- : crawler 0 found 94\n" + -# "[2019-03-11 10:15:13.641] DEBUG -- : crawler 3 found 95\n" + -# "[2019-03-11 10:15:13.642] DEBUG -- : crawler 1 found 96\n" + -# "[2019-03-11 10:15:13.718] DEBUG -- : data-processor 17 got 89\n" + -# "[2019-03-11 10:15:13.719] DEBUG -- : data-processor 19 got 8a\n" + -# "[2019-03-11 10:15:13.720] DEBUG -- : data-processor 16 got 8b\n" + -# "[2019-03-11 10:15:13.721] DEBUG -- : data-processor 18 got 8c\n" + -# "[2019-03-11 10:15:13.736] DEBUG -- : data-processor 3 got 8e\n" + -# "[2019-03-11 10:15:13.737] DEBUG -- : data-processor 2 got 8d\n" + -# "[2019-03-11 10:15:13.738] DEBUG -- : data-processor 1 got 8f\n" + -# "[2019-03-11 10:15:13.739] DEBUG -- : crawler 3 found 97\n" + -# "[2019-03-11 10:15:13.740] DEBUG -- : crawler 0 found 98\n" + -# "[2019-03-11 10:15:13.741] DEBUG -- : crawler 1 found 99\n" + -# "[2019-03-11 10:15:13.742] DEBUG -- : crawler 2 found 9a\n" + -# "[2019-03-11 10:15:13.743] DEBUG -- : data-processor 0 got 90\n" + -# "[2019-03-11 10:15:13.747] DEBUG -- : crawler 3 found 9b\n" + -# "[2019-03-11 10:15:13.748] DEBUG -- : crawler 0 found 9c\n" + -# "[2019-03-11 10:15:13.749] DEBUG -- : crawler 1 found 9d\n" + -# "[2019-03-11 10:15:13.750] DEBUG -- : crawler 2 found 9e\n" + -# "[2019-03-11 10:15:13.757] DEBUG -- : crawler 0 found 9f\n" + -# "[2019-03-11 10:15:13.758] DEBUG -- : crawler 3 found a0\n" + -# "[2019-03-11 10:15:13.759] DEBUG -- : crawler 1 found a1\n" + -# "[2019-03-11 10:15:13.760] DEBUG -- : crawler 2 found a2\n" + -# "[2019-03-11 10:15:13.822] DEBUG -- : data-processor 6 got 91\n" + -# "[2019-03-11 10:15:13.824] DEBUG -- : data-processor 4 got 92\n" + -# "[2019-03-11 10:15:13.825] DEBUG -- : data-processor 5 got 93\n" + -# "[2019-03-11 10:15:13.826] DEBUG -- : data-processor 7 got 94\n" + -# "[2019-03-11 10:15:13.840] DEBUG -- : data-processor 8 got 95\n" + -# "[2019-03-11 10:15:13.841] DEBUG -- : data-processor 10 got 96\n" + -# "[2019-03-11 10:15:13.842] DEBUG -- : data-processor 9 got 97\n" + -# "[2019-03-11 10:15:13.843] DEBUG -- : data-processor 11 got 98\n" + -# "[2019-03-11 10:15:13.933] DEBUG -- : data-processor 12 got 99\n" + -# "[2019-03-11 10:15:13.934] DEBUG -- : crawler 0 found a4\n" + -# "[2019-03-11 10:15:13.935] DEBUG -- : data-processor 15 got 9a\n" + -# "[2019-03-11 10:15:13.935] DEBUG -- : data-processor 14 got 9b\n" + -# "[2019-03-11 10:15:13.936] DEBUG -- : crawler 1 found a6\n" + -# "[2019-03-11 10:15:13.936] DEBUG -- : crawler 3 found a3\n" + -# "[2019-03-11 10:15:13.937] DEBUG -- : data-processor 13 got 9c\n" + -# "[2019-03-11 10:15:13.938] DEBUG -- : crawler 2 found a5\n" + -# "[2019-03-11 10:15:13.938] INFO -- : \n" + -# "crawlers found: 41, 42, 42, 41\n" + -# "data processors consumed: 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7\n" + -# "[2019-03-11 10:15:13.942] DEBUG -- : data-processor 17 got 9d\n" + -# "[2019-03-11 10:15:13.943] DEBUG -- : data-processor 19 got 9e\n" + -# "[2019-03-11 10:15:13.944] DEBUG -- : crawler 0 found a7\n" + -# "[2019-03-11 10:15:13.945] DEBUG -- : data-processor 16 got 9f\n" + -# "[2019-03-11 10:15:13.946] DEBUG -- : crawler 1 found a8\n" + -# "[2019-03-11 10:15:13.947] DEBUG -- : data-processor 18 got a0\n" + -# "[2019-03-11 10:15:14.033] DEBUG -- : data-processor 2 got a1\n" + -# "[2019-03-11 10:15:14.035] DEBUG -- : data-processor 3 got a2\n" + -# "[2019-03-11 10:15:14.035] DEBUG -- : data-processor 1 got a3\n" + -# "[2019-03-11 10:15:14.036] DEBUG -- : data-processor 0 got a4\n" + -# "[2019-03-11 10:15:14.044] DEBUG -- : data-processor 6 got a5\n" +# "[2019-11-17 16:32:04.427] DEBUG -- : data-processor 18 got 61\n" + +# "[2019-11-17 16:32:04.428] DEBUG -- : data-processor 16 got 62\n" + +# "[2019-11-17 16:32:04.429] DEBUG -- : data-processor 17 got 63\n" + +# "[2019-11-17 16:32:04.431] DEBUG -- : data-processor 19 got 64\n" + +# "[2019-11-17 16:32:04.457] DEBUG -- : data-processor 1 got 65\n" + +# "[2019-11-17 16:32:04.458] DEBUG -- : data-processor 0 got 66\n" + +# "[2019-11-17 16:32:04.458] DEBUG -- : data-processor 2 got 67\n" + +# "[2019-11-17 16:32:04.460] DEBUG -- : data-processor 3 got 68\n" + +# "[2019-11-17 16:32:04.460] DEBUG -- : crawler 1 found 6f\n" + +# "[2019-11-17 16:32:04.460] DEBUG -- : crawler 2 found 70\n" + +# "[2019-11-17 16:32:04.461] DEBUG -- : crawler 0 found 71\n" + +# "[2019-11-17 16:32:04.462] DEBUG -- : crawler 3 found 72\n" + +# "[2019-11-17 16:32:04.462] DEBUG -- : data-processor 4 got 69\n" + +# "[2019-11-17 16:32:04.463] DEBUG -- : data-processor 5 got 6a\n" + +# "[2019-11-17 16:32:04.463] DEBUG -- : data-processor 7 got 6b\n" + +# "[2019-11-17 16:32:04.463] DEBUG -- : data-processor 6 got 6c\n" + +# "[2019-11-17 16:32:04.469] DEBUG -- : crawler 1 found 73\n" + +# "[2019-11-17 16:32:04.470] DEBUG -- : crawler 2 found 74\n" + +# "[2019-11-17 16:32:04.471] DEBUG -- : crawler 0 found 75\n" + +# "[2019-11-17 16:32:04.472] DEBUG -- : crawler 3 found 76\n" + +# "[2019-11-17 16:32:04.535] DEBUG -- : data-processor 10 got 6d\n" + +# "[2019-11-17 16:32:04.535] DEBUG -- : data-processor 9 got 6e\n" + +# "[2019-11-17 16:32:04.539] DEBUG -- : data-processor 12 got 6f\n" + +# "[2019-11-17 16:32:04.540] DEBUG -- : crawler 3 found 77\n" + +# "[2019-11-17 16:32:04.540] DEBUG -- : data-processor 13 got 70\n" + +# "[2019-11-17 16:32:04.540] DEBUG -- : crawler 2 found 78\n" + +# "[2019-11-17 16:32:04.541] DEBUG -- : crawler 1 found 79\n" + +# "[2019-11-17 16:32:04.541] DEBUG -- : crawler 0 found 7a\n" + +# "[2019-11-17 16:32:04.545] DEBUG -- : crawler 3 found 7b\n" + +# "[2019-11-17 16:32:04.546] DEBUG -- : crawler 2 found 7c\n" + +# "[2019-11-17 16:32:04.547] DEBUG -- : crawler 1 found 7d\n" + +# "[2019-11-17 16:32:04.547] DEBUG -- : crawler 0 found 7e\n" + +# "[2019-11-17 16:32:04.561] DEBUG -- : data-processor 14 got 71\n" + +# "[2019-11-17 16:32:04.562] DEBUG -- : data-processor 15 got 72\n" + +# "[2019-11-17 16:32:04.563] DEBUG -- : data-processor 11 got 73\n" + +# "[2019-11-17 16:32:04.563] DEBUG -- : data-processor 8 got 74\n" + +# "[2019-11-17 16:32:04.564] DEBUG -- : data-processor 18 got 75\n" + +# "[2019-11-17 16:32:04.564] DEBUG -- : data-processor 19 got 76\n" + +# "[2019-11-17 16:32:04.564] DEBUG -- : data-processor 16 got 77\n" + +# "[2019-11-17 16:32:04.565] DEBUG -- : data-processor 17 got 78\n" + +# "[2019-11-17 16:32:04.565] DEBUG -- : crawler 3 found 7f\n" + +# "[2019-11-17 16:32:04.565] DEBUG -- : crawler 2 found 80\n" + +# "[2019-11-17 16:32:04.566] DEBUG -- : crawler 1 found 81\n" + +# "[2019-11-17 16:32:04.566] DEBUG -- : crawler 0 found 82\n" + +# "[2019-11-17 16:32:04.575] DEBUG -- : crawler 3 found 83\n" + +# "[2019-11-17 16:32:04.640] DEBUG -- : data-processor 5 got 79\n" + +# "[2019-11-17 16:32:04.641] DEBUG -- : data-processor 1 got 7a\n" + +# "[2019-11-17 16:32:04.642] DEBUG -- : data-processor 3 got 7b\n" + +# "[2019-11-17 16:32:04.642] DEBUG -- : data-processor 0 got 7c\n" + +# "[2019-11-17 16:32:04.642] DEBUG -- : crawler 2 found 84\n" + +# "[2019-11-17 16:32:04.643] DEBUG -- : crawler 1 found 85\n" + +# "[2019-11-17 16:32:04.643] DEBUG -- : crawler 0 found 86\n" + +# "[2019-11-17 16:32:04.644] DEBUG -- : crawler 3 found 87\n" + +# "[2019-11-17 16:32:04.653] DEBUG -- : crawler 2 found 88\n" + +# "[2019-11-17 16:32:04.654] DEBUG -- : crawler 1 found 89\n" + +# "[2019-11-17 16:32:04.654] DEBUG -- : crawler 0 found 8a\n" + +# "[2019-11-17 16:32:04.654] DEBUG -- : crawler 3 found 8b\n" + +# "[2019-11-17 16:32:04.666] DEBUG -- : data-processor 4 got 7d\n" + +# "[2019-11-17 16:32:04.667] DEBUG -- : data-processor 6 got 7e\n" + +# "[2019-11-17 16:32:04.669] DEBUG -- : data-processor 2 got 7f\n" + +# "[2019-11-17 16:32:04.669] DEBUG -- : data-processor 7 got 80\n" + +# "[2019-11-17 16:32:04.670] DEBUG -- : data-processor 10 got 81\n" + +# "[2019-11-17 16:32:04.670] DEBUG -- : crawler 1 found 8c\n" + +# "[2019-11-17 16:32:04.671] DEBUG -- : crawler 2 found 8d\n" + +# "[2019-11-17 16:32:04.671] DEBUG -- : crawler 3 found 8e\n" + +# "[2019-11-17 16:32:04.671] DEBUG -- : data-processor 12 got 84\n" + +# "[2019-11-17 16:32:04.672] DEBUG -- : data-processor 14 got 85\n" + +# "[2019-11-17 16:32:04.672] DEBUG -- : data-processor 11 got 86\n" + +# "[2019-11-17 16:32:04.672] DEBUG -- : crawler 0 found 8f\n" + +# "[2019-11-17 16:32:04.678] DEBUG -- : crawler 1 found 90\n" + +# "[2019-11-17 16:32:04.678] DEBUG -- : crawler 2 found 91\n" + +# "[2019-11-17 16:32:04.680] DEBUG -- : crawler 3 found 92\n" + +# "[2019-11-17 16:32:04.681] DEBUG -- : crawler 0 found 93\n" + +# "[2019-11-17 16:32:04.688] DEBUG -- : crawler 1 found 94\n" + +# "[2019-11-17 16:32:04.738] DEBUG -- : data-processor 15 got 87\n" + +# "[2019-11-17 16:32:04.743] DEBUG -- : data-processor 18 got 88\n" + +# "[2019-11-17 16:32:04.743] DEBUG -- : data-processor 8 got 89\n" + +# "[2019-11-17 16:32:04.744] DEBUG -- : data-processor 16 got 8a\n" + +# "[2019-11-17 16:32:04.772] DEBUG -- : data-processor 9 got 82\n" + +# "[2019-11-17 16:32:04.772] DEBUG -- : data-processor 13 got 83\n" + +# "[2019-11-17 16:32:04.773] DEBUG -- : data-processor 17 got 8b\n" + +# "[2019-11-17 16:32:04.773] DEBUG -- : data-processor 19 got 8c\n" + +# "[2019-11-17 16:32:04.774] DEBUG -- : data-processor 5 got 8d\n" + +# "[2019-11-17 16:32:04.774] DEBUG -- : data-processor 0 got 8e\n" + +# "[2019-11-17 16:32:04.774] DEBUG -- : data-processor 1 got 8f\n" + +# "[2019-11-17 16:32:04.775] DEBUG -- : data-processor 3 got 90\n" + +# "[2019-11-17 16:32:04.775] DEBUG -- : crawler 2 found 95\n" + +# "[2019-11-17 16:32:04.776] DEBUG -- : crawler 3 found 96\n" + +# "[2019-11-17 16:32:04.778] DEBUG -- : crawler 0 found 97\n" + +# "[2019-11-17 16:32:04.778] DEBUG -- : crawler 1 found 98\n" + +# "[2019-11-17 16:32:04.785] DEBUG -- : crawler 2 found 99\n" + +# "[2019-11-17 16:32:04.785] DEBUG -- : crawler 0 found 9a\n" + +# "[2019-11-17 16:32:04.786] INFO -- : \n" + +# "crawlers found: 38, 38, 39, 39\n" + +# "data processors consumed: 8, 8, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7\n" + +# "[2019-11-17 16:32:04.841] DEBUG -- : data-processor 7 got 91\n" + +# "[2019-11-17 16:32:04.841] DEBUG -- : crawler 3 found 9b\n" + +# "[2019-11-17 16:32:04.842] DEBUG -- : crawler 1 found 9c\n" + +# "[2019-11-17 16:32:04.842] DEBUG -- : crawler 2 found 9d\n" + +# "[2019-11-17 16:32:04.843] DEBUG -- : crawler 0 found 9e\n" + +# "[2019-11-17 16:32:04.843] DEBUG -- : data-processor 10 got 92\n" + +# "[2019-11-17 16:32:04.844] DEBUG -- : data-processor 4 got 93\n" + +# "[2019-11-17 16:32:04.844] DEBUG -- : data-processor 12 got 94\n" + +# "[2019-11-17 16:32:04.853] DEBUG -- : crawler 3 found 9f\n" + +# "[2019-11-17 16:32:04.854] DEBUG -- : crawler 1 found a0\n" + +# "[2019-11-17 16:32:04.854] DEBUG -- : crawler 2 found a1\n" + +# "[2019-11-17 16:32:04.855] DEBUG -- : crawler 0 found a2\n" + +# "[2019-11-17 16:32:04.876] DEBUG -- : data-processor 14 got 95\n" + +# "[2019-11-17 16:32:04.877] DEBUG -- : data-processor 6 got 96\n" + +# "[2019-11-17 16:32:04.878] DEBUG -- : data-processor 2 got 97\n" + +# "[2019-11-17 16:32:04.878] DEBUG -- : data-processor 11 got 98\n" + +# "[2019-11-17 16:32:04.879] DEBUG -- : data-processor 15 got 99\n" + +# "[2019-11-17 16:32:04.879] DEBUG -- : data-processor 16 got 9a\n" + +# "[2019-11-17 16:32:04.879] DEBUG -- : data-processor 18 got 9b\n" + +# "[2019-11-17 16:32:04.880] DEBUG -- : data-processor 8 got 9c\n" + +# "[2019-11-17 16:32:04.880] DEBUG -- : crawler 3 found a3\n" + +# "[2019-11-17 16:32:04.881] DEBUG -- : crawler 1 found a4\n" + +# "[2019-11-17 16:32:04.881] DEBUG -- : crawler 2 found a5\n" + +# "[2019-11-17 16:32:04.881] DEBUG -- : crawler 0 found a6\n" + +# "[2019-11-17 16:32:04.947] DEBUG -- : data-processor 13 got 9d\n" + +# "[2019-11-17 16:32:04.947] DEBUG -- : data-processor 0 got 9e\n" + +# "[2019-11-17 16:32:04.948] DEBUG -- : data-processor 1 got 9f\n" + +# "[2019-11-17 16:32:04.948] DEBUG -- : data-processor 19 got a0\n" + +# "[2019-11-17 16:32:04.948] DEBUG -- : crawler 3 found a7\n" + +# "[2019-11-17 16:32:04.949] DEBUG -- : crawler 1 found a8\n" + +# "[2019-11-17 16:32:04.949] DEBUG -- : crawler 2 found a9\n" + +# "[2019-11-17 16:32:04.949] DEBUG -- : crawler 0 found aa\n" + +# "[2019-11-17 16:32:04.959] DEBUG -- : crawler 3 found ab\n" + +# "[2019-11-17 16:32:04.960] DEBUG -- : crawler 1 found ac\n" + +# "[2019-11-17 16:32:04.961] DEBUG -- : crawler 2 found ad\n" + +# "[2019-11-17 16:32:04.961] DEBUG -- : crawler 0 found ae\n" + +# "[2019-11-17 16:32:04.980] DEBUG -- : data-processor 3 got a1\n" + +# "[2019-11-17 16:32:04.982] DEBUG -- : data-processor 9 got a2\n" + +# "[2019-11-17 16:32:04.983] DEBUG -- : data-processor 17 got a3\n" + +# "[2019-11-17 16:32:04.983] DEBUG -- : data-processor 5 got a4\n" + +# "[2019-11-17 16:32:04.984] DEBUG -- : data-processor 10 got a5\n" + +# "[2019-11-17 16:32:04.984] DEBUG -- : data-processor 4 got a6\n" + +# "[2019-11-17 16:32:04.985] DEBUG -- : data-processor 12 got a7\n" + +# "[2019-11-17 16:32:04.985] DEBUG -- : data-processor 7 got a8\n" + +# "[2019-11-17 16:32:04.985] DEBUG -- : crawler 3 found af\n" + +# "[2019-11-17 16:32:04.986] DEBUG -- : crawler 1 found b0\n" + +# "[2019-11-17 16:32:04.986] DEBUG -- : crawler 2 found b1\n" + +# "[2019-11-17 16:32:04.986] DEBUG -- : crawler 0 found b2\n" + +# "[2019-11-17 16:32:04.996] DEBUG -- : crawler 3 found b3\n" + +# "[2019-11-17 16:32:04.997] DEBUG -- : crawler 1 found b4\n" + +# "[2019-11-17 16:32:05.053] DEBUG -- : data-processor 14 got a9\n" + +# "[2019-11-17 16:32:05.054] DEBUG -- : data-processor 6 got aa\n" + +# "[2019-11-17 16:32:05.054] DEBUG -- : data-processor 11 got ab\n" + +# "[2019-11-17 16:32:05.055] DEBUG -- : data-processor 18 got ac\n" + +# "[2019-11-17 16:32:05.055] DEBUG -- : crawler 2 found b5\n" + +# "[2019-11-17 16:32:05.056] DEBUG -- : crawler 0 found b6\n" + +# "[2019-11-17 16:32:05.056] DEBUG -- : crawler 1 found b7\n" + +# "[2019-11-17 16:32:05.056] DEBUG -- : crawler 3 found b8\n" + +# "[2019-11-17 16:32:05.064] DEBUG -- : crawler 2 found b9\n" + +# "[2019-11-17 16:32:05.065] DEBUG -- : crawler 0 found ba\n" + +# "[2019-11-17 16:32:05.065] DEBUG -- : crawler 1 found bb\n" + +# "[2019-11-17 16:32:05.085] DEBUG -- : data-processor 8 got ad\n" + +# "[2019-11-17 16:32:05.087] DEBUG -- : data-processor 2 got ae\n" + +# "[2019-11-17 16:32:05.087] DEBUG -- : data-processor 15 got af\n" + +# "[2019-11-17 16:32:05.087] DEBUG -- : data-processor 16 got b0\n" + +# "[2019-11-17 16:32:05.088] DEBUG -- : data-processor 13 got b1\n" + +# "[2019-11-17 16:32:05.088] DEBUG -- : data-processor 0 got b2\n" + +# "[2019-11-17 16:32:05.088] DEBUG -- : data-processor 1 got b3\n" + +# "[2019-11-17 16:32:05.089] DEBUG -- : data-processor 19 got b4\n" + +# "[2019-11-17 16:32:05.089] DEBUG -- : crawler 3 found bc\n" + +# "[2019-11-17 16:32:05.089] DEBUG -- : crawler 2 found bd\n" + +# "[2019-11-17 16:32:05.090] DEBUG -- : crawler 0 found be\n" + +# "[2019-11-17 16:32:05.090] DEBUG -- : crawler 1 found bf\n" + +# "[2019-11-17 16:32:05.097] DEBUG -- : crawler 3 found c0\n" + +# "[2019-11-17 16:32:05.157] DEBUG -- : data-processor 3 got b5\n" + +# "[2019-11-17 16:32:05.157] DEBUG -- : data-processor 9 got b6\n" + +# "[2019-11-17 16:32:05.157] DEBUG -- : data-processor 17 got b7\n" + +# "[2019-11-17 16:32:05.158] DEBUG -- : data-processor 12 got b8\n" + +# "[2019-11-17 16:32:05.158] DEBUG -- : crawler 2 found c1\n" + +# "[2019-11-17 16:32:05.158] DEBUG -- : crawler 0 found c2\n" + +# "[2019-11-17 16:32:05.159] DEBUG -- : crawler 1 found c3\n" + +# "[2019-11-17 16:32:05.159] DEBUG -- : crawler 3 found c4\n" + +# "[2019-11-17 16:32:05.167] DEBUG -- : crawler 0 found c5\n" + +# "[2019-11-17 16:32:05.167] DEBUG -- : crawler 3 found c6\n" + +# "[2019-11-17 16:32:05.190] DEBUG -- : data-processor 7 got b9\n" + +# "[2019-11-17 16:32:05.191] DEBUG -- : data-processor 10 got ba\n" + +# "[2019-11-17 16:32:05.192] DEBUG -- : data-processor 5 got bb\n" + +# "[2019-11-17 16:32:05.193] DEBUG -- : data-processor 4 got bc\n" + +# "[2019-11-17 16:32:05.193] DEBUG -- : data-processor 11 got bd\n" + +# "[2019-11-17 16:32:05.194] DEBUG -- : crawler 2 found c7\n" + +# "[2019-11-17 16:32:05.194] DEBUG -- : crawler 1 found c8\n" + +# "[2019-11-17 16:32:05.194] DEBUG -- : crawler 0 found c9\n" + +# "[2019-11-17 16:32:05.195] DEBUG -- : crawler 3 found ca\n" + +# "[2019-11-17 16:32:05.195] DEBUG -- : data-processor 14 got be\n" + +# "[2019-11-17 16:32:05.196] DEBUG -- : data-processor 6 got bf\n" + +# "[2019-11-17 16:32:05.196] DEBUG -- : data-processor 18 got c0\n" + +# "[2019-11-17 16:32:05.196] INFO -- : \n" + +# "crawlers found: 50, 50, 50, 52\n" + +# "data processors consumed: 10, 10, 9, 10, 10, 10, 10, 10, 9, 9, 10, 10, 10, 9, 10, 9, 9, 9, 10, 9\n" + +# "[2019-11-17 16:32:05.201] DEBUG -- : crawler 2 found cb\n" + +# "[2019-11-17 16:32:05.201] DEBUG -- : crawler 1 found cc\n" + +# "[2019-11-17 16:32:05.262] DEBUG -- : data-processor 15 got c1\n" + +# "[2019-11-17 16:32:05.263] DEBUG -- : data-processor 13 got c2\n" + +# "[2019-11-17 16:32:05.264] DEBUG -- : data-processor 8 got c3\n" + +# "[2019-11-17 16:32:05.264] DEBUG -- : data-processor 2 got c4\n" + +# "[2019-11-17 16:32:05.265] DEBUG -- : crawler 0 found cd\n" + +# "[2019-11-17 16:32:05.265] DEBUG -- : crawler 3 found ce\n" + +# "[2019-11-17 16:32:05.266] DEBUG -- : crawler 2 found cf\n" + +# "[2019-11-17 16:32:05.266] DEBUG -- : crawler 1 found d0\n" + +# "[2019-11-17 16:32:05.275] DEBUG -- : crawler 0 found d1\n" + +# "[2019-11-17 16:32:05.275] DEBUG -- : crawler 3 found d2\n" + +# "[2019-11-17 16:32:05.293] DEBUG -- : data-processor 16 got c5\n" + +# "[2019-11-17 16:32:05.293] DEBUG -- : data-processor 0 got c6\n" + +# "[2019-11-17 16:32:05.293] DEBUG -- : data-processor 1 got c7\n" + +# "[2019-11-17 16:32:05.294] DEBUG -- : data-processor 19 got c8\n" + +# "[2019-11-17 16:32:05.294] DEBUG -- : data-processor 3 got c9\n" + +# "[2019-11-17 16:32:05.294] DEBUG -- : data-processor 9 got ca\n" + +# "[2019-11-17 16:32:05.295] DEBUG -- : data-processor 17 got cb\n" + +# "[2019-11-17 16:32:05.295] DEBUG -- : data-processor 12 got cc\n" + +# "[2019-11-17 16:32:05.295] DEBUG -- : crawler 2 found d3\n" + +# "[2019-11-17 16:32:05.296] DEBUG -- : crawler 1 found d4\n" + +# "[2019-11-17 16:32:05.296] DEBUG -- : crawler 0 found d5\n" + +# "[2019-11-17 16:32:05.296] DEBUG -- : crawler 3 found d6\n" + +# "[2019-11-17 16:32:05.305] DEBUG -- : crawler 2 found d7\n" + +# "[2019-11-17 16:32:05.367] DEBUG -- : data-processor 5 got cd\n" + +# "[2019-11-17 16:32:05.368] DEBUG -- : data-processor 7 got ce\n" + +# "[2019-11-17 16:32:05.368] DEBUG -- : data-processor 10 got cf\n" + +# "[2019-11-17 16:32:05.368] DEBUG -- : data-processor 4 got d0\n" + +# "[2019-11-17 16:32:05.369] DEBUG -- : crawler 3 found d8\n" + +# "[2019-11-17 16:32:05.369] DEBUG -- : crawler 1 found d9\n" + +# "[2019-11-17 16:32:05.369] DEBUG -- : crawler 0 found da\n" + +# "[2019-11-17 16:32:05.370] DEBUG -- : crawler 2 found db\n" + +# "[2019-11-17 16:32:05.377] DEBUG -- : crawler 3 found dc\n" + +# "[2019-11-17 16:32:05.378] DEBUG -- : crawler 1 found dd\n" + +# "[2019-11-17 16:32:05.379] DEBUG -- : crawler 2 found de\n" + +# "[2019-11-17 16:32:05.392] DEBUG -- : data-processor 11 got d1\n" + +# "[2019-11-17 16:32:05.393] DEBUG -- : data-processor 14 got d2\n" + +# "[2019-11-17 16:32:05.399] DEBUG -- : data-processor 6 got d3\n" + +# "[2019-11-17 16:32:05.400] DEBUG -- : data-processor 18 got d4\n" + +# "[2019-11-17 16:32:05.400] DEBUG -- : data-processor 2 got d5\n" + +# "[2019-11-17 16:32:05.401] DEBUG -- : data-processor 15 got d6\n" + +# "[2019-11-17 16:32:05.401] DEBUG -- : data-processor 13 got d7\n" + +# "[2019-11-17 16:32:05.402] DEBUG -- : data-processor 8 got d8\n" + +# "[2019-11-17 16:32:05.402] DEBUG -- : crawler 0 found df\n" + +# "[2019-11-17 16:32:05.402] DEBUG -- : crawler 3 found e0\n" + +# "[2019-11-17 16:32:05.403] DEBUG -- : crawler 1 found e1\n" + +# "[2019-11-17 16:32:05.403] DEBUG -- : crawler 2 found e2\n" + +# "[2019-11-17 16:32:05.410] DEBUG -- : crawler 0 found e3\n" + +# "[2019-11-17 16:32:05.411] DEBUG -- : crawler 3 found e4\n" + +# "[2019-11-17 16:32:05.466] DEBUG -- : data-processor 0 got d9\n" + +# "[2019-11-17 16:32:05.467] DEBUG -- : data-processor 16 got da\n" + +# "[2019-11-17 16:32:05.473] DEBUG -- : data-processor 1 got db\n" + +# "[2019-11-17 16:32:05.473] DEBUG -- : data-processor 19 got dc\n" + +# "[2019-11-17 16:32:05.474] DEBUG -- : crawler 1 found e5\n" + +# "[2019-11-17 16:32:05.474] DEBUG -- : crawler 2 found e6\n" + +# "[2019-11-17 16:32:05.475] DEBUG -- : crawler 0 found e7\n" + +# "[2019-11-17 16:32:05.475] DEBUG -- : crawler 3 found e8\n" + +# "[2019-11-17 16:32:05.486] DEBUG -- : crawler 1 found e9\n" + +# "[2019-11-17 16:32:05.487] DEBUG -- : crawler 2 found ea\n" + +# "[2019-11-17 16:32:05.487] DEBUG -- : crawler 0 found eb\n" + +# "[2019-11-17 16:32:05.488] DEBUG -- : crawler 3 found ec\n" + +# "[2019-11-17 16:32:05.495] DEBUG -- : data-processor 12 got dd\n" + +# "[2019-11-17 16:32:05.495] DEBUG -- : data-processor 3 got de\n" + +# "[2019-11-17 16:32:05.501] DEBUG -- : data-processor 9 got df\n" + +# "[2019-11-17 16:32:05.502] DEBUG -- : data-processor 17 got e0\n" + +# "[2019-11-17 16:32:05.505] DEBUG -- : data-processor 5 got e1\n" + +# "[2019-11-17 16:32:05.506] DEBUG -- : data-processor 7 got e2\n" + +# "[2019-11-17 16:32:05.506] DEBUG -- : data-processor 10 got e3\n" + +# "[2019-11-17 16:32:05.506] DEBUG -- : data-processor 4 got e4\n" + +# "[2019-11-17 16:32:05.507] DEBUG -- : crawler 1 found ed\n" + +# "[2019-11-17 16:32:05.507] DEBUG -- : crawler 0 found ee\n" + +# "[2019-11-17 16:32:05.508] DEBUG -- : crawler 2 found ef\n" + +# "[2019-11-17 16:32:05.508] DEBUG -- : crawler 3 found f0\n" + +# "[2019-11-17 16:32:05.516] DEBUG -- : crawler 0 found f1\n" + +# "[2019-11-17 16:32:05.517] DEBUG -- : crawler 2 found f2\n" + +# "[2019-11-17 16:32:05.571] DEBUG -- : data-processor 11 got e5\n" + +# "[2019-11-17 16:32:05.572] DEBUG -- : data-processor 14 got e6\n" + +# "[2019-11-17 16:32:05.576] DEBUG -- : data-processor 6 got e7\n" + +# "[2019-11-17 16:32:05.576] DEBUG -- : data-processor 18 got e8\n" + +# "[2019-11-17 16:32:05.583] INFO -- : \n" + +# "crawlers found: 60, 59, 61, 62\n" + +# "data processors consumed: 12, 12, 11, 12, 12, 12, 12, 12, 11, 11, 12, 12, 12, 11, 12, 11, 11, 11, 12, 11\n" + +# "[2019-11-17 16:32:05.618] DEBUG -- : crawler 1 found f3\n" + +# "[2019-11-17 16:32:05.619] DEBUG -- : crawler 3 found f4\n" + +# "[2019-11-17 16:32:05.633] DEBUG -- : crawler 0 found f5\n" + +# "[2019-11-17 16:32:05.633] DEBUG -- : crawler 2 found f6\n" diff --git a/docs/js/app.js b/docs/js/app.js index fecf69db3..368f44a94 100644 --- a/docs/js/app.js +++ b/docs/js/app.js @@ -275,6 +275,16 @@ function mainFocus() { setTimeout(function() { $('#main').focus(); }, 10); } +function navigationChange() { + // This works around the broken anchor navigation with the YARD template. + window.onpopstate = function() { + var hash = window.location.hash; + if (hash !== '' && $(hash)[0]) { + $(hash)[0].scrollIntoView(); + } + }; +} + $(document).ready(function() { navResizer(); navExpander(); @@ -287,6 +297,7 @@ $(document).ready(function() { constantSummaryToggle(); generateTOC(); mainFocus(); + navigationChange(); }); })(); diff --git a/docs/master/Concurrent/Actor.html b/docs/master/Concurrent/Actor.html index b1fe7c33d..cffdf6403 100644 --- a/docs/master/Concurrent/Actor.html +++ b/docs/master/Concurrent/Actor.html @@ -218,9 +218,7 @@

    Sending messages

    Sends the message asynchronously to the actor and immediately returns self (the reference) allowing to chain message telling.
  • Reference#ask -testing and when it returns very shortly. It can lead to deadlock if all threads in -global_io_executor will block on while asking. It's fine to use it form outside of actors and -global_io_executor.
  • +
  • Reference#ask! Sends the message synchronously and blocks until the message is processed. Raises on error.
  • diff --git a/docs/master/Concurrent/Actor/Reference.html b/docs/master/Concurrent/Actor/Reference.html index 0ab0173d5..209779846 100644 --- a/docs/master/Concurrent/Actor/Reference.html +++ b/docs/master/Concurrent/Actor/Reference.html @@ -177,7 +177,7 @@

    -

    testing and when it returns very shortly.

    +

    Supplied future.

    @@ -687,12 +687,12 @@

     
     
    -100
    -101
    -102
    +95 +96 +97 -
    # File 'lib-edge/concurrent/actor/reference.rb', line 100
    +      
    # File 'lib-edge/concurrent/actor/reference.rb', line 95
     
     def ==(other)
       Type? other, self.class and other.send(:core) == core
    @@ -720,22 +720,14 @@ 

    Note: -

    it's a good practice to use tell whenever possible. Ask should be used only for

    -
    -
    - -
    - Note: -

    it's a good practice to use #tell whenever possible. Results can be send back with other messages. +

    it's a good practice to use #tell whenever possible. Results can be sent back with other messages. Ask should be used only for testing and when it returns very shortly. It can lead to deadlock if all threads in global_io_executor will block on while asking. It's fine to use it form outside of actors and global_io_executor.

    -

    testing and when it returns very shortly. It can lead to deadlock if all threads in -global_io_executor will block on while asking. It's fine to use it form outside of actors and -global_io_executor.

    +

    Returns supplied future

    @@ -808,12 +800,12 @@

     
     
    -54
    -55
    -56
    +49 +50 +51

    -
    # File 'lib-edge/concurrent/actor/reference.rb', line 54
    +      
    # File 'lib-edge/concurrent/actor/reference.rb', line 49
     
     def ask(message, future = Concurrent::Promises.resolvable_future)
       message message, future
    @@ -837,7 +829,7 @@ 

    Note: -

    it's a good practice to use #tell whenever possible. Results can be send back with other messages. +

    it's a good practice to use #tell whenever possible. Results can be sent back with other messages. Ask should be used only for testing and when it returns very shortly. It can lead to deadlock if all threads in global_io_executor will block on while asking. It's fine to use it form outside of actors and global_io_executor.

    @@ -934,12 +926,12 @@

     
     
    -75
    -76
    -77
    +70 +71 +72

    -
    # File 'lib-edge/concurrent/actor/reference.rb', line 75
    +      
    # File 'lib-edge/concurrent/actor/reference.rb', line 70
     
     def ask!(message, future = Concurrent::Promises.resolvable_future)
       ask(message, future).value!
    @@ -980,12 +972,12 @@ 

     
     
    -90
    -91
    -92
    +85 +86 +87

    -
    # File 'lib-edge/concurrent/actor/reference.rb', line 90
    +      
    # File 'lib-edge/concurrent/actor/reference.rb', line 85
     
     def dead_letter_routing
       core.dead_letter_routing
    @@ -1019,12 +1011,12 @@ 

     
     
    -79
    -80
    -81
    +74 +75 +76

    -
    # File 'lib-edge/concurrent/actor/reference.rb', line 79
    +      
    # File 'lib-edge/concurrent/actor/reference.rb', line 74
     
     def map(messages)
       messages.map { |m| self.ask(m) }
    @@ -1059,13 +1051,13 @@ 

     
     
    -84
    -85
    -86
    -87
    +79 +80 +81 +82

    -
    # File 'lib-edge/concurrent/actor/reference.rb', line 84
    +      
    # File 'lib-edge/concurrent/actor/reference.rb', line 79
     
     def message(message, future = nil)
       core.on_envelope Envelope.new(message, future, Actor.current || Thread.current, self)
    @@ -1192,12 +1184,12 @@ 

     
     
    -94
    -95
    -96
    +89 +90 +91

    -
    # File 'lib-edge/concurrent/actor/reference.rb', line 94
    +      
    # File 'lib-edge/concurrent/actor/reference.rb', line 89
     
     def to_s
       format '%s %s (%s)>', super[0..-2], path, actor_class
    diff --git a/docs/master/Concurrent/Array.html b/docs/master/Concurrent/Array.html
    index a036b4561..9153750e8 100644
    --- a/docs/master/Concurrent/Array.html
    +++ b/docs/master/Concurrent/Array.html
    @@ -104,7 +104,12 @@ 

    Overview

    Note: -

    a += b is not a thread-safe operation on

    +

    a += b is not a thread-safe operation on +Concurrent::Array. It reads array a, then it creates new Concurrent::Array +which is concatenation of a and b, then it writes the concatenation to a. +The read and write are independent operations they do not form a single atomic +operation therefore when two += operations are executed concurrently updates +may be lost. Use #concat instead.

    @@ -112,12 +117,6 @@

    Overview

    itself for every method call, ensuring only one thread can be reading or writing at a time. This includes iteration methods like #each.

    -

    Concurrent::Array. It reads array a, then it creates new Concurrent::Array -which is concatenation of a and b, then it writes the concatenation to a. -The read and write are independent operations they do not form a single atomic -operation therefore when two += operations are executed concurrently updates -may be lost. Use #concat instead.

    -
    diff --git a/docs/master/Concurrent/ErlangActor.html b/docs/master/Concurrent/ErlangActor.html index 71e065c23..dd99f7f08 100644 --- a/docs/master/Concurrent/ErlangActor.html +++ b/docs/master/Concurrent/ErlangActor.html @@ -119,7 +119,7 @@

    Overview

    Although, Promises.future { 1 + 1 } is better suited for that purpose.

    actor = Concurrent::ErlangActor.spawn(type: :on_thread, name: 'addition') { 1 + 1 }
    -# => #<Concurrent::ErlangActor::Pid:0x000002 addition terminated normally with 2>
    +# => #<Concurrent::ErlangActor::Pid:0x000002 addition running>
     actor.terminated.value!                  # => 2
     
    diff --git a/docs/master/Concurrent/Promises/Channel.html b/docs/master/Concurrent/Promises/Channel.html index 870e00cc0..a4242c4de 100644 --- a/docs/master/Concurrent/Promises/Channel.html +++ b/docs/master/Concurrent/Promises/Channel.html @@ -325,16 +325,16 @@

    Backpressure

    # "producer 1 pushing 0", # "consumer 0 got 0. payload 0 from producer 0", # "producer 0 pushing 3", -# "consumer 2 got 0. payload 1 from producer 0", -# "consumer 3 got 0. payload 2 from producer 0", -# "consumer 1 got 0. payload 0 from producer 1", +# "consumer 1 got 0. payload 1 from producer 0", # "producer 1 pushing 1", +# "consumer 2 got 0. payload 2 from producer 0", +# "consumer 3 got 0. payload 0 from producer 1", # "producer 1 pushing 2", -# "consumer 2 got 1. payload 3 from producer 0", +# "consumer 0 got 1. payload 3 from producer 0", +# "producer 1 pushing 3", # "consumer 3 got 1. payload 1 from producer 1", # "consumer 1 got 1. payload 2 from producer 1", -# "producer 1 pushing 3", -# "consumer 0 got 1. payload 3 from producer 1"] +# "consumer 2 got 1. payload 3 from producer 1"]

    The producers are much faster than consumers @@ -387,21 +387,21 @@

    Backpressure

    # investigate log log # => ["producer 0 pushing 0", -# "producer 1 pushing 0", # "producer 0 pushing 1", +# "producer 1 pushing 0", +# "consumer 1 got 0. payload 1 from producer 0", +# "producer 0 pushing 2", +# "producer 0 pushing 3", # "producer 1 pushing 1", # "consumer 0 got 0. payload 0 from producer 0", -# "consumer 1 got 0. payload 0 from producer 1", -# "consumer 2 got 0. payload 1 from producer 0", -# "producer 0 pushing 2", -# "consumer 3 got 0. payload 1 from producer 1", +# "consumer 2 got 0. payload 0 from producer 1", # "producer 1 pushing 2", -# "producer 0 pushing 3", +# "consumer 3 got 0. payload 2 from producer 0", # "producer 1 pushing 3", -# "consumer 3 got 1. payload 3 from producer 0", -# "consumer 2 got 1. payload 3 from producer 1", -# "consumer 0 got 1. payload 2 from producer 0", -# "consumer 1 got 1. payload 2 from producer 1"] +# "consumer 1 got 1. payload 3 from producer 0", +# "consumer 0 got 1. payload 1 from producer 1", +# "consumer 2 got 1. payload 2 from producer 1", +# "consumer 3 got 1. payload 3 from producer 1"]

    Synchronization of workers by passing a value

    diff --git a/docs/master/Concurrent/Set.html b/docs/master/Concurrent/Set.html index 4b59aa621..bdb952f9a 100644 --- a/docs/master/Concurrent/Set.html +++ b/docs/master/Concurrent/Set.html @@ -104,7 +104,12 @@

    Overview

    Note: -

    a += b is not a thread-safe operation on

    +

    a += b is not a thread-safe operation on +Concurrent::Set. It reads Set a, then it creates new Concurrent::Set +which is union of a and b, then it writes the union to a. +The read and write are independent operations they do not form a single atomic +operation therefore when two += operations are executed concurrently updates +may be lost. Use #merge instead.

    @@ -112,12 +117,6 @@

    Overview

    itself for every method call, ensuring only one thread can be reading or writing at a time. This includes iteration methods like #each.

    -

    Concurrent::Set. It reads Set a, then it creates new Concurrent::Set -which is union of a and b, then it writes the union to a. -The read and write are independent operations they do not form a single atomic -operation therefore when two += operations are executed concurrently updates -may be lost. Use #merge instead.

    -
    diff --git a/docs/master/Concurrent/SingleThreadExecutor.html b/docs/master/Concurrent/SingleThreadExecutor.html index 641025f3f..4c364c27c 100644 --- a/docs/master/Concurrent/SingleThreadExecutor.html +++ b/docs/master/Concurrent/SingleThreadExecutor.html @@ -561,7 +561,7 @@

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 55
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 56
     
     
    @@ -618,7 +618,6 @@

     
     
    -36
     37
     38
     39
    @@ -637,10 +636,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -735,7 +735,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -754,10 +753,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -845,7 +845,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -864,10 +863,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -936,7 +936,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -955,10 +954,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -1027,7 +1027,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -1046,10 +1045,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -1104,7 +1104,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -1123,10 +1122,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -1249,7 +1249,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -1268,10 +1267,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -1340,7 +1340,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -1359,10 +1358,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -1433,7 +1433,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -1452,10 +1451,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -1509,7 +1509,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -1528,10 +1527,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -1600,7 +1600,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -1619,10 +1618,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -1691,7 +1691,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -1710,10 +1709,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    @@ -1812,7 +1812,6 @@ 

     
     
    -36
     37
     38
     39
    @@ -1831,10 +1830,11 @@ 

    52 53 54 -55

    +55 +56

    -
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 36
    +      
    # File 'lib/concurrent/executor/single_thread_executor.rb', line 37
     
     class SingleThreadExecutor < SingleThreadExecutorImplementation
     
    diff --git a/docs/master/Concurrent/WrappingExecutor.html b/docs/master/Concurrent/WrappingExecutor.html
    index 432db19f2..42e1bc67f 100644
    --- a/docs/master/Concurrent/WrappingExecutor.html
    +++ b/docs/master/Concurrent/WrappingExecutor.html
    @@ -103,13 +103,31 @@
     
     

    Overview

    -

    Used for wrapping an Executor with Wrapper which can modify arguments or task passed to Executor

    +

    A delegating executor which modifies each task with arguments +before the task is given to the target executor it delegates to.

    +
    +

    Examples:

    + + +

    Count task executions

    +

    + +
    counter          = AtomicFixnum.new
    +count_executions = WrappingExecutor.new Concurrent.global_io_executor do |*args, &task|
    +  [*args, -> *args { counter.increment; task.call *args }]
    +end
    +10.times { count_executions.post { :do_something } }
    +sleep 0.01
    +counter.value #=> 10
    + +
    +
    @@ -143,7 +161,8 @@

    -
    +

    Does the task queue have a maximum size?.

    +
    @@ -176,7 +195,7 @@

  • - #post(*args, &task) ⇒ undocumented + #post(*args) { ... } ⇒ Boolean @@ -190,7 +209,8 @@

    -
    +

    Submit a task to the executor for asynchronous processing.

    +

  • @@ -212,7 +232,8 @@

    -
    +

    Does this executor guarantee serialization of its operations?.

    +
    @@ -260,7 +281,7 @@

    — -

    Executor to be wrapped

    +

    an executor to delegate the tasks to

    @@ -278,7 +299,7 @@

    — -

    Wrapper block which wraps the task with args before it is passed to the Executor

    +

    A function which can modify the task with arguments

    @@ -297,7 +318,7 @@

    — -

    Wrapper block will get these from #post call

    +

    the arguments submitted with the tasks

    @@ -312,7 +333,7 @@

    — -

    Wrapper block will get this from #post call

    +

    the task submitted to the executor to be modified

    @@ -329,7 +350,7 @@

    — -

    args and task on the last place.

    +

    a new arguments and task [*args, task] which are submitted to the target executor

    @@ -342,14 +363,14 @@

     
     
    -14
    -15
    -16
    -17
    -18
    +23 +24 +25 +26 +27

    -
    # File 'lib/concurrent/executor/wrapping_executor.rb', line 14
    +      
    # File 'lib/concurrent/executor/wrapping_executor.rb', line 23
     
     def initialize(executor, &wrapper)
       super()
    @@ -379,7 +400,8 @@ 

    - +

    Does the task queue have a maximum size?

    +
    @@ -395,6 +417,10 @@

    + — +

    True if the task queue has a maximum size else false.

    +
    + @@ -405,12 +431,12 @@

     
     
    -25
    -26
    -27
    +38 +39 +40

    -
    # File 'lib/concurrent/executor/wrapping_executor.rb', line 25
    +      
    # File 'lib/concurrent/executor/wrapping_executor.rb', line 38
     
     def can_overflow?
       @Executor.can_overflow?
    @@ -423,25 +449,113 @@ 

    - #post(*args, &task) ⇒ undocumented + #post(*args) { ... } ⇒ Boolean -

    +
    +
    +

    Submit a task to the executor for asynchronous processing.

    + + +
    +
    +
    +

    Parameters:

    +
      + +
    • + + args + + + (Array) + + + + — +

      zero or more arguments to be passed to the task

      +
      + +
    • + +
    + +

    Yields:

    +
      + +
    • + + + + + + + +

      the asynchronous task to perform

      +
      + +
    • + +
    +

    Returns:

    +
      + +
    • + + + (Boolean) + + + + — +

      true if the task is queued, false if the executor +is not running

      +
      + +
    • + +
    +

    Raises:

    +
      + +
    • + + + (ArgumentError) + + + + — +

      if no task is given

      +
      + +
    • + +
    + +

    See Also:

    + + +
     
     
    -20
    -21
    -22
    -23
    +32 +33 +34 +35
    -
    # File 'lib/concurrent/executor/wrapping_executor.rb', line 20
    +      
    # File 'lib/concurrent/executor/wrapping_executor.rb', line 32
     
     def post(*args, &task)
       *args, task = @Wrapper.call(*args, &task)
    @@ -463,7 +577,8 @@ 

    - +

    Does this executor guarantee serialization of its operations?

    +
    @@ -479,6 +594,12 @@

    + — +

    True if the executor guarantees that all operations +will be post in the order they are received and no two operations may +occur simultaneously. Else false.

    +
    + @@ -489,12 +610,12 @@

     
     
    -29
    -30
    -31
    +43 +44 +45

    -
    # File 'lib/concurrent/executor/wrapping_executor.rb', line 29
    +      
    # File 'lib/concurrent/executor/wrapping_executor.rb', line 43
     
     def serialized?
       @Executor.serialized?
    diff --git a/docs/master/file.medium-example.out.html b/docs/master/file.medium-example.out.html
    index 2b9eeeba6..12ca07dba 100644
    --- a/docs/master/file.medium-example.out.html
    +++ b/docs/master/file.medium-example.out.html
    @@ -146,8 +146,8 @@
     
     sleep 0.05 # the logging is asynchronous, we need to wait a bit until it's written
     get_captured_output
    -# => "[2019-03-11 10:13:02.337] FATAL -- : :tornado\n" +
    -#    "[2019-03-11 10:13:02.338]  INFO -- : :breeze\n"
    +# => "[2019-11-17 16:32:03.468] FATAL -- : :tornado\n" +
    +#    "[2019-11-17 16:32:03.469]  INFO -- : :breeze\n"
     
     # the logging could be wrapped in a method
     def log(severity, message)
    @@ -159,7 +159,7 @@
     log INFO, 'alive'                        # => true
     sleep 0.05                               # => 0
     get_captured_output
    -# => "[2019-03-11 10:13:02.389]  INFO -- : alive\n"
    +# => "[2019-11-17 16:32:03.520]  INFO -- : alive\n"
     
     
     # The stub which will represent the web
    @@ -221,9 +221,9 @@
         end
       end
     end.freeze
    -# => [#<Thread:0x000009@medium-example.in.rb:130 sleep>,
    -#     #<Thread:0x00000a@medium-example.in.rb:130 sleep>,
    -#     #<Thread:0x00000b@medium-example.in.rb:130 sleep>,
    +# => [#<Thread:0x000009@medium-example.in.rb:130 run>,
    +#     #<Thread:0x00000a@medium-example.in.rb:130 run>,
    +#     #<Thread:0x00000b@medium-example.in.rb:130 run>,
     #     #<Thread:0x00000c@medium-example.in.rb:130 run>]
     
     # So far only the crawlers looking for data are defined
    @@ -406,373 +406,517 @@
     
     # inspect collected char frequencies
     DB.data
    -# => {"1"=>18,
    -#     "2"=>18,
    +# => {"2"=>18,
    +#     "1"=>18,
     #     "3"=>18,
     #     "4"=>18,
    +#     "7"=>18,
     #     "5"=>18,
     #     "6"=>18,
    -#     "7"=>18,
     #     "8"=>18,
    -#     "a"=>6,
    -#     "c"=>1,
     #     "9"=>18,
    -#     "b"=>1,
    -#     "d"=>1,
    -#     "e"=>1,
    +#     "a"=>18,
    +#     "b"=>18,
    +#     "c"=>18,
    +#     "d"=>18,
    +#     "e"=>10,
     #     "f"=>1}
     
     # see the logger output
     get_captured_output
    -# => "[2019-03-11 10:13:02.461] DEBUG -- : crawler 0 found 1\n" +
    -#    "[2019-03-11 10:13:02.462] DEBUG -- : data-processor 0 got 1\n" +
    -#    "[2019-03-11 10:13:02.463] DEBUG -- : crawler 1 found 2\n" +
    -#    "[2019-03-11 10:13:02.464] DEBUG -- : data-processor 1 got 2\n" +
    -#    "[2019-03-11 10:13:02.465] DEBUG -- : crawler 2 found 3\n" +
    -#    "[2019-03-11 10:13:02.465] DEBUG -- : data-processor 2 got 3\n" +
    -#    "[2019-03-11 10:13:02.466] DEBUG -- : crawler 3 found 4\n" +
    -#    "[2019-03-11 10:13:02.467] DEBUG -- : data-processor 3 got 4\n" +
    -#    "[2019-03-11 10:13:02.471] DEBUG -- : crawler 0 found 5\n" +
    -#    "[2019-03-11 10:13:02.472] DEBUG -- : data-processor 4 got 5\n" +
    -#    "[2019-03-11 10:13:02.473] DEBUG -- : crawler 1 found 6\n" +
    -#    "[2019-03-11 10:13:02.473] DEBUG -- : data-processor 5 got 6\n" +
    -#    "[2019-03-11 10:13:02.474] DEBUG -- : crawler 2 found 7\n" +
    -#    "[2019-03-11 10:13:02.475] DEBUG -- : data-processor 6 got 7\n" +
    -#    "[2019-03-11 10:13:02.476] DEBUG -- : crawler 3 found 8\n" +
    -#    "[2019-03-11 10:13:02.477] DEBUG -- : data-processor 7 got 8\n" +
    -#    "[2019-03-11 10:13:02.482] DEBUG -- : crawler 0 found 9\n" +
    -#    "[2019-03-11 10:13:02.483] DEBUG -- : crawler 1 found a\n" +
    -#    "[2019-03-11 10:13:02.484] DEBUG -- : crawler 2 found b\n" +
    -#    "[2019-03-11 10:13:02.487] DEBUG -- : crawler 3 found c\n" +
    -#    "[2019-03-11 10:13:02.493] DEBUG -- : crawler 0 found d\n" +
    -#    "[2019-03-11 10:13:02.495] DEBUG -- : crawler 1 found e\n" +
    -#    "[2019-03-11 10:13:02.496] DEBUG -- : crawler 2 found f\n" +
    -#    "[2019-03-11 10:13:02.500] DEBUG -- : crawler 3 found 10\n" +
    -#    "[2019-03-11 10:13:02.505] DEBUG -- : crawler 1 found 11\n" +
    -#    "[2019-03-11 10:13:02.506] DEBUG -- : crawler 0 found 12\n" +
    -#    "[2019-03-11 10:13:02.507] DEBUG -- : crawler 2 found 13\n" +
    -#    "[2019-03-11 10:13:02.511] DEBUG -- : crawler 3 found 14\n" +
    -#    "[2019-03-11 10:13:02.517] DEBUG -- : crawler 0 found 15\n" +
    -#    "[2019-03-11 10:13:02.518] DEBUG -- : crawler 1 found 16\n" +
    -#    "[2019-03-11 10:13:02.519] DEBUG -- : crawler 2 found 17\n" +
    -#    "[2019-03-11 10:13:02.524] DEBUG -- : crawler 3 found 18\n" +
    -#    "[2019-03-11 10:13:02.528] DEBUG -- : crawler 0 found 19\n" +
    -#    "[2019-03-11 10:13:02.529] DEBUG -- : crawler 1 found 1a\n" +
    -#    "[2019-03-11 10:13:02.531] DEBUG -- : crawler 2 found 1b\n" +
    -#    "[2019-03-11 10:13:02.536] DEBUG -- : crawler 3 found 1c\n" +
    -#    "[2019-03-11 10:13:02.541] DEBUG -- : crawler 0 found 1d\n" +
    -#    "[2019-03-11 10:13:02.542] DEBUG -- : crawler 1 found 1e\n" +
    -#    "[2019-03-11 10:13:02.565] DEBUG -- : data-processor 8 got 9\n" +
    -#    "[2019-03-11 10:13:02.567] DEBUG -- : data-processor 9 got a\n" +
    -#    "[2019-03-11 10:13:02.568] DEBUG -- : data-processor 10 got b\n" +
    -#    "[2019-03-11 10:13:02.569] DEBUG -- : data-processor 11 got c\n" +
    -#    "[2019-03-11 10:13:02.575] DEBUG -- : data-processor 12 got d\n" +
    -#    "[2019-03-11 10:13:02.577] DEBUG -- : data-processor 13 got e\n" +
    -#    "[2019-03-11 10:13:02.578] DEBUG -- : data-processor 14 got f\n" +
    -#    "[2019-03-11 10:13:02.581] DEBUG -- : data-processor 15 got 10\n" +
    -#    "[2019-03-11 10:13:02.670] DEBUG -- : data-processor 16 got 11\n" +
    -#    "[2019-03-11 10:13:02.672] DEBUG -- : data-processor 17 got 12\n" +
    -#    "[2019-03-11 10:13:02.672] DEBUG -- : data-processor 18 got 13\n" +
    -#    "[2019-03-11 10:13:02.673] DEBUG -- : data-processor 19 got 14\n" +
    -#    "[2019-03-11 10:13:02.684] DEBUG -- : data-processor 0 got 15\n" +
    -#    "[2019-03-11 10:13:02.686] DEBUG -- : crawler 2 found 1f\n" +
    -#    "[2019-03-11 10:13:02.686] DEBUG -- : crawler 3 found 20\n" +
    -#    "[2019-03-11 10:13:02.688] DEBUG -- : crawler 1 found 21\n" +
    -#    "[2019-03-11 10:13:02.688] DEBUG -- : data-processor 1 got 16\n" +
    -#    "[2019-03-11 10:13:02.690] DEBUG -- : data-processor 2 got 17\n" +
    -#    "[2019-03-11 10:13:02.690] DEBUG -- : data-processor 3 got 18\n" +
    -#    "[2019-03-11 10:13:02.691] DEBUG -- : crawler 0 found 22\n" +
    -#    "[2019-03-11 10:13:02.694] DEBUG -- : crawler 3 found 23\n" +
    -#    "[2019-03-11 10:13:02.696] DEBUG -- : crawler 1 found 24\n" +
    -#    "[2019-03-11 10:13:02.697] DEBUG -- : crawler 2 found 25\n" +
    -#    "[2019-03-11 10:13:02.698] DEBUG -- : crawler 0 found 26\n" +
    -#    "[2019-03-11 10:13:02.705] DEBUG -- : crawler 3 found 27\n" +
    -#    "[2019-03-11 10:13:02.706] DEBUG -- : crawler 2 found 28\n" +
    -#    "[2019-03-11 10:13:02.708] DEBUG -- : crawler 1 found 29\n" +
    -#    "[2019-03-11 10:13:02.708] DEBUG -- : crawler 0 found 2a\n" +
    -#    "[2019-03-11 10:13:02.776] DEBUG -- : data-processor 4 got 19\n" +
    -#    "[2019-03-11 10:13:02.777] DEBUG -- : data-processor 5 got 1a\n" +
    -#    "[2019-03-11 10:13:02.778] DEBUG -- : data-processor 6 got 1b\n" +
    -#    "[2019-03-11 10:13:02.782] DEBUG -- : data-processor 7 got 1c\n" +
    -#    "[2019-03-11 10:13:02.789] DEBUG -- : data-processor 9 got 1d\n" +
    -#    "[2019-03-11 10:13:02.790] DEBUG -- : data-processor 11 got 1e\n" +
    -#    "[2019-03-11 10:13:02.791] DEBUG -- : data-processor 8 got 1f\n" +
    -#    "[2019-03-11 10:13:02.792] DEBUG -- : data-processor 10 got 20\n" +
    -#    "[2019-03-11 10:13:02.854]  INFO -- : \n" +
    -#    "crawlers found: 11, 11, 10, 10\n" +
    -#    "data processors consumed: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1\n" +
    -#    "[2019-03-11 10:13:02.879] DEBUG -- : data-processor 12 got 22\n" +
    -#    "[2019-03-11 10:13:02.880] DEBUG -- : data-processor 13 got 21\n" +
    -#    "[2019-03-11 10:13:02.881] DEBUG -- : crawler 2 found 2c\n" +
    -#    "[2019-03-11 10:13:02.882] DEBUG -- : crawler 3 found 2d\n" +
    -#    "[2019-03-11 10:13:02.883] DEBUG -- : crawler 0 found 2e\n" +
    -#    "[2019-03-11 10:13:02.883] DEBUG -- : crawler 1 found 2b\n" +
    -#    "[2019-03-11 10:13:02.884] DEBUG -- : data-processor 14 got 23\n" +
    -#    "[2019-03-11 10:13:02.885] DEBUG -- : data-processor 15 got 24\n" +
    -#    "[2019-03-11 10:13:02.891] DEBUG -- : crawler 2 found 2f\n" +
    -#    "[2019-03-11 10:13:02.892] DEBUG -- : crawler 3 found 30\n" +
    -#    "[2019-03-11 10:13:02.892] DEBUG -- : crawler 1 found 31\n" +
    -#    "[2019-03-11 10:13:02.894] DEBUG -- : crawler 0 found 32\n" +
    -#    "[2019-03-11 10:13:02.894] DEBUG -- : data-processor 18 got 25\n" +
    -#    "[2019-03-11 10:13:02.895] DEBUG -- : data-processor 19 got 26\n" +
    -#    "[2019-03-11 10:13:02.896] DEBUG -- : data-processor 16 got 27\n" +
    -#    "[2019-03-11 10:13:02.896] DEBUG -- : data-processor 17 got 28\n" +
    -#    "[2019-03-11 10:13:02.903] DEBUG -- : crawler 2 found 33\n" +
    -#    "[2019-03-11 10:13:02.904] DEBUG -- : crawler 1 found 34\n" +
    -#    "[2019-03-11 10:13:02.905] DEBUG -- : crawler 0 found 35\n" +
    -#    "[2019-03-11 10:13:02.905] DEBUG -- : crawler 3 found 36\n" +
    -#    "[2019-03-11 10:13:02.984] DEBUG -- : data-processor 0 got 29\n" +
    -#    "[2019-03-11 10:13:02.985] DEBUG -- : data-processor 3 got 2a\n" +
    -#    "[2019-03-11 10:13:02.986] DEBUG -- : data-processor 2 got 2c\n" +
    -#    "[2019-03-11 10:13:02.987] DEBUG -- : data-processor 1 got 2d\n" +
    -#    "[2019-03-11 10:13:03.000] DEBUG -- : data-processor 5 got 2e\n" +
    -#    "[2019-03-11 10:13:03.001] DEBUG -- : data-processor 6 got 2b\n" +
    -#    "[2019-03-11 10:13:03.002] DEBUG -- : data-processor 7 got 2f\n" +
    -#    "[2019-03-11 10:13:03.003] DEBUG -- : crawler 2 found 37\n" +
    -#    "[2019-03-11 10:13:03.004] DEBUG -- : crawler 1 found 38\n" +
    -#    "[2019-03-11 10:13:03.005] DEBUG -- : crawler 0 found 39\n" +
    -#    "[2019-03-11 10:13:03.005] DEBUG -- : data-processor 4 got 30\n" +
    -#    "[2019-03-11 10:13:03.006] DEBUG -- : crawler 3 found 3a\n" +
    -#    "[2019-03-11 10:13:03.013] DEBUG -- : crawler 2 found 3b\n" +
    -#    "[2019-03-11 10:13:03.014] DEBUG -- : crawler 0 found 3c\n" +
    -#    "[2019-03-11 10:13:03.015] DEBUG -- : crawler 1 found 3d\n" +
    -#    "[2019-03-11 10:13:03.016] DEBUG -- : crawler 3 found 3e\n" +
    -#    "[2019-03-11 10:13:03.026] DEBUG -- : crawler 2 found 3f\n" +
    -#    "[2019-03-11 10:13:03.027] DEBUG -- : crawler 0 found 40\n" +
    -#    "[2019-03-11 10:13:03.028] DEBUG -- : crawler 1 found 41\n" +
    -#    "[2019-03-11 10:13:03.028] DEBUG -- : crawler 3 found 42\n" +
    -#    "[2019-03-11 10:13:03.089] DEBUG -- : data-processor 9 got 31\n" +
    -#    "[2019-03-11 10:13:03.090] DEBUG -- : data-processor 11 got 32\n" +
    -#    "[2019-03-11 10:13:03.091] DEBUG -- : data-processor 8 got 33\n" +
    -#    "[2019-03-11 10:13:03.092] DEBUG -- : data-processor 10 got 34\n" +
    -#    "[2019-03-11 10:13:03.104] DEBUG -- : data-processor 13 got 35\n" +
    -#    "[2019-03-11 10:13:03.105] DEBUG -- : data-processor 15 got 36\n" +
    -#    "[2019-03-11 10:13:03.106] DEBUG -- : data-processor 12 got 37\n" +
    -#    "[2019-03-11 10:13:03.107] DEBUG -- : data-processor 14 got 38\n" +
    -#    "[2019-03-11 10:13:03.195] DEBUG -- : data-processor 18 got 39\n" +
    -#    "[2019-03-11 10:13:03.196] DEBUG -- : crawler 2 found 43\n" +
    -#    "[2019-03-11 10:13:03.197] DEBUG -- : crawler 3 found 46\n" +
    -#    "[2019-03-11 10:13:03.198] DEBUG -- : crawler 1 found 45\n" +
    -#    "[2019-03-11 10:13:03.198] DEBUG -- : data-processor 19 got 3a\n" +
    -#    "[2019-03-11 10:13:03.199] DEBUG -- : data-processor 17 got 3b\n" +
    -#    "[2019-03-11 10:13:03.200] DEBUG -- : data-processor 16 got 3c\n" +
    -#    "[2019-03-11 10:13:03.200] DEBUG -- : crawler 0 found 44\n" +
    -#    "[2019-03-11 10:13:03.207] DEBUG -- : crawler 2 found 47\n" +
    -#    "[2019-03-11 10:13:03.208] DEBUG -- : crawler 0 found 48\n" +
    -#    "[2019-03-11 10:13:03.209] DEBUG -- : crawler 1 found 49\n" +
    -#    "[2019-03-11 10:13:03.210] DEBUG -- : crawler 3 found 4a\n" +
    -#    "[2019-03-11 10:13:03.211] DEBUG -- : data-processor 0 got 3d\n" +
    -#    "[2019-03-11 10:13:03.212] DEBUG -- : data-processor 2 got 3e\n" +
    -#    "[2019-03-11 10:13:03.213] DEBUG -- : data-processor 3 got 3f\n" +
    -#    "[2019-03-11 10:13:03.214] DEBUG -- : data-processor 1 got 40\n" +
    -#    "[2019-03-11 10:13:03.219] DEBUG -- : crawler 2 found 4b\n" +
    -#    "[2019-03-11 10:13:03.220] DEBUG -- : crawler 0 found 4c\n" +
    -#    "[2019-03-11 10:13:03.221] DEBUG -- : crawler 1 found 4d\n" +
    -#    "[2019-03-11 10:13:03.223] DEBUG -- : crawler 3 found 4e\n" +
    -#    "[2019-03-11 10:13:03.231] DEBUG -- : crawler 2 found 4f\n" +
    -#    "[2019-03-11 10:13:03.260]  INFO -- : \n" +
    -#    "crawlers found: 20, 20, 20, 19\n" +
    -#    "data processors consumed: 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3\n" +
    -#    "[2019-03-11 10:13:03.299] DEBUG -- : data-processor 5 got 41\n" +
    -#    "[2019-03-11 10:13:03.301] DEBUG -- : data-processor 7 got 42\n" +
    -#    "[2019-03-11 10:13:03.301] DEBUG -- : data-processor 4 got 44\n" +
    -#    "[2019-03-11 10:13:03.302] DEBUG -- : data-processor 6 got 43\n" +
    -#    "[2019-03-11 10:13:03.317] DEBUG -- : data-processor 9 got 46\n" +
    -#    "[2019-03-11 10:13:03.318] DEBUG -- : data-processor 11 got 45\n" +
    -#    "[2019-03-11 10:13:03.319] DEBUG -- : crawler 0 found 50\n" +
    -#    "[2019-03-11 10:13:03.320] DEBUG -- : crawler 3 found 51\n" +
    -#    "[2019-03-11 10:13:03.321] DEBUG -- : crawler 1 found 52\n" +
    -#    "[2019-03-11 10:13:03.321] DEBUG -- : crawler 2 found 53\n" +
    -#    "[2019-03-11 10:13:03.322] DEBUG -- : data-processor 8 got 47\n" +
    -#    "[2019-03-11 10:13:03.323] DEBUG -- : data-processor 10 got 48\n" +
    -#    "[2019-03-11 10:13:03.329] DEBUG -- : crawler 0 found 54\n" +
    -#    "[2019-03-11 10:13:03.330] DEBUG -- : crawler 3 found 55\n" +
    -#    "[2019-03-11 10:13:03.331] DEBUG -- : crawler 1 found 56\n" +
    -#    "[2019-03-11 10:13:03.332] DEBUG -- : crawler 2 found 57\n" +
    -#    "[2019-03-11 10:13:03.341] DEBUG -- : crawler 2 found 58\n" +
    -#    "[2019-03-11 10:13:03.342] DEBUG -- : crawler 0 found 59\n" +
    -#    "[2019-03-11 10:13:03.343] DEBUG -- : crawler 1 found 5a\n" +
    -#    "[2019-03-11 10:13:03.344] DEBUG -- : crawler 3 found 5b\n" +
    -#    "[2019-03-11 10:13:03.404] DEBUG -- : data-processor 15 got 49\n" +
    -#    "[2019-03-11 10:13:03.405] DEBUG -- : data-processor 13 got 4a\n" +
    -#    "[2019-03-11 10:13:03.405] DEBUG -- : data-processor 12 got 4b\n" +
    -#    "[2019-03-11 10:13:03.406] DEBUG -- : data-processor 14 got 4c\n" +
    -#    "[2019-03-11 10:13:03.418] DEBUG -- : data-processor 17 got 4d\n" +
    -#    "[2019-03-11 10:13:03.422] DEBUG -- : data-processor 16 got 4e\n" +
    -#    "[2019-03-11 10:13:03.423] DEBUG -- : data-processor 19 got 4f\n" +
    -#    "[2019-03-11 10:13:03.424] DEBUG -- : data-processor 18 got 50\n" +
    -#    "[2019-03-11 10:13:03.511] DEBUG -- : data-processor 2 got 51\n" +
    -#    "[2019-03-11 10:13:03.512] DEBUG -- : data-processor 0 got 52\n" +
    -#    "[2019-03-11 10:13:03.513] DEBUG -- : data-processor 1 got 53\n" +
    -#    "[2019-03-11 10:13:03.514] DEBUG -- : data-processor 3 got 54\n" +
    -#    "[2019-03-11 10:13:03.516] DEBUG -- : crawler 2 found 5c\n" +
    -#    "[2019-03-11 10:13:03.516] DEBUG -- : crawler 0 found 5d\n" +
    -#    "[2019-03-11 10:13:03.517] DEBUG -- : crawler 1 found 5e\n" +
    -#    "[2019-03-11 10:13:03.518] DEBUG -- : crawler 3 found 5f\n" +
    -#    "[2019-03-11 10:13:03.522] DEBUG -- : data-processor 7 got 55\n" +
    -#    "[2019-03-11 10:13:03.525] DEBUG -- : crawler 2 found 60\n" +
    -#    "[2019-03-11 10:13:03.525] DEBUG -- : crawler 0 found 61\n" +
    -#    "[2019-03-11 10:13:03.526] DEBUG -- : crawler 1 found 62\n" +
    -#    "[2019-03-11 10:13:03.527] DEBUG -- : crawler 3 found 63\n" +
    -#    "[2019-03-11 10:13:03.528] DEBUG -- : data-processor 6 got 56\n" +
    -#    "[2019-03-11 10:13:03.529] DEBUG -- : data-processor 5 got 57\n" +
    -#    "[2019-03-11 10:13:03.529] DEBUG -- : data-processor 4 got 58\n" +
    -#    "[2019-03-11 10:13:03.537] DEBUG -- : crawler 0 found 64\n" +
    -#    "[2019-03-11 10:13:03.537] DEBUG -- : crawler 2 found 65\n" +
    -#    "[2019-03-11 10:13:03.538] DEBUG -- : crawler 3 found 66\n" +
    -#    "[2019-03-11 10:13:03.614] DEBUG -- : data-processor 9 got 59\n" +
    -#    "[2019-03-11 10:13:03.616] DEBUG -- : data-processor 11 got 5a\n" +
    -#    "[2019-03-11 10:13:03.616] DEBUG -- : data-processor 10 got 5b\n" +
    -#    "[2019-03-11 10:13:03.617] DEBUG -- : data-processor 8 got 5c\n" +
    -#    "[2019-03-11 10:13:03.629] DEBUG -- : data-processor 13 got 5d\n" +
    -#    "[2019-03-11 10:13:03.630] DEBUG -- : crawler 1 found 67\n" +
    -#    "[2019-03-11 10:13:03.630] DEBUG -- : crawler 0 found 68\n" +
    -#    "[2019-03-11 10:13:03.632] DEBUG -- : crawler 3 found 69\n" +
    -#    "[2019-03-11 10:13:03.633] DEBUG -- : crawler 2 found 6a\n" +
    -#    "[2019-03-11 10:13:03.633] DEBUG -- : data-processor 14 got 5f\n" +
    -#    "[2019-03-11 10:13:03.634] DEBUG -- : data-processor 15 got 5e\n" +
    -#    "[2019-03-11 10:13:03.635] DEBUG -- : data-processor 12 got 60\n" +
    -#    "[2019-03-11 10:13:03.641] DEBUG -- : crawler 1 found 6b\n" +
    -#    "[2019-03-11 10:13:03.642] DEBUG -- : crawler 0 found 6c\n" +
    -#    "[2019-03-11 10:13:03.642] DEBUG -- : crawler 2 found 6d\n" +
    -#    "[2019-03-11 10:13:03.643] DEBUG -- : crawler 3 found 6e\n" +
    -#    "[2019-03-11 10:13:03.651] DEBUG -- : crawler 1 found 6f\n" +
    -#    "[2019-03-11 10:13:03.652] DEBUG -- : crawler 0 found 70\n" +
    -#    "[2019-03-11 10:13:03.653] DEBUG -- : crawler 3 found 71\n" +
    -#    "[2019-03-11 10:13:03.653] DEBUG -- : crawler 2 found 72\n" +
    -#    "[2019-03-11 10:13:03.666]  INFO -- : \n" +
    -#    "crawlers found: 29, 28, 29, 28\n" +
    +# => "[2019-11-17 16:32:03.596] DEBUG -- : crawler 0 found 1\n" +
    +#    "[2019-11-17 16:32:03.597] DEBUG -- : crawler 2 found 2\n" +
    +#    "[2019-11-17 16:32:03.597] DEBUG -- : data-processor 1 got 2\n" +
    +#    "[2019-11-17 16:32:03.598] DEBUG -- : crawler 1 found 3\n" +
    +#    "[2019-11-17 16:32:03.598] DEBUG -- : crawler 3 found 4\n" +
    +#    "[2019-11-17 16:32:03.599] DEBUG -- : data-processor 0 got 1\n" +
    +#    "[2019-11-17 16:32:03.599] DEBUG -- : data-processor 2 got 3\n" +
    +#    "[2019-11-17 16:32:03.600] DEBUG -- : data-processor 3 got 4\n" +
    +#    "[2019-11-17 16:32:03.608] DEBUG -- : crawler 2 found 5\n" +
    +#    "[2019-11-17 16:32:03.608] DEBUG -- : data-processor 4 got 5\n" +
    +#    "[2019-11-17 16:32:03.609] DEBUG -- : crawler 0 found 6\n" +
    +#    "[2019-11-17 16:32:03.609] DEBUG -- : crawler 1 found 7\n" +
    +#    "[2019-11-17 16:32:03.609] DEBUG -- : data-processor 6 got 7\n" +
    +#    "[2019-11-17 16:32:03.610] DEBUG -- : crawler 3 found 8\n" +
    +#    "[2019-11-17 16:32:03.610] DEBUG -- : data-processor 5 got 6\n" +
    +#    "[2019-11-17 16:32:03.611] DEBUG -- : data-processor 7 got 8\n" +
    +#    "[2019-11-17 16:32:03.622] DEBUG -- : crawler 2 found 9\n" +
    +#    "[2019-11-17 16:32:03.622] DEBUG -- : crawler 0 found a\n" +
    +#    "[2019-11-17 16:32:03.623] DEBUG -- : crawler 1 found b\n" +
    +#    "[2019-11-17 16:32:03.624] DEBUG -- : crawler 3 found c\n" +
    +#    "[2019-11-17 16:32:03.624] DEBUG -- : data-processor 8 got 9\n" +
    +#    "[2019-11-17 16:32:03.625] DEBUG -- : data-processor 9 got a\n" +
    +#    "[2019-11-17 16:32:03.625] DEBUG -- : data-processor 10 got b\n" +
    +#    "[2019-11-17 16:32:03.625] DEBUG -- : data-processor 11 got c\n" +
    +#    "[2019-11-17 16:32:03.632] DEBUG -- : crawler 2 found d\n" +
    +#    "[2019-11-17 16:32:03.633] DEBUG -- : crawler 0 found e\n" +
    +#    "[2019-11-17 16:32:03.633] DEBUG -- : crawler 1 found f\n" +
    +#    "[2019-11-17 16:32:03.633] DEBUG -- : crawler 3 found 10\n" +
    +#    "[2019-11-17 16:32:03.643] DEBUG -- : crawler 3 found 11\n" +
    +#    "[2019-11-17 16:32:03.644] DEBUG -- : crawler 2 found 12\n" +
    +#    "[2019-11-17 16:32:03.645] DEBUG -- : crawler 0 found 13\n" +
    +#    "[2019-11-17 16:32:03.645] DEBUG -- : crawler 1 found 14\n" +
    +#    "[2019-11-17 16:32:03.654] DEBUG -- : crawler 2 found 15\n" +
    +#    "[2019-11-17 16:32:03.654] DEBUG -- : crawler 3 found 16\n" +
    +#    "[2019-11-17 16:32:03.655] DEBUG -- : crawler 0 found 17\n" +
    +#    "[2019-11-17 16:32:03.656] DEBUG -- : crawler 1 found 18\n" +
    +#    "[2019-11-17 16:32:03.664] DEBUG -- : crawler 2 found 19\n" +
    +#    "[2019-11-17 16:32:03.667] DEBUG -- : crawler 3 found 1a\n" +
    +#    "[2019-11-17 16:32:03.668] DEBUG -- : crawler 0 found 1b\n" +
    +#    "[2019-11-17 16:32:03.669] DEBUG -- : crawler 1 found 1c\n" +
    +#    "[2019-11-17 16:32:03.675] DEBUG -- : crawler 2 found 1d\n" +
    +#    "[2019-11-17 16:32:03.680] DEBUG -- : crawler 3 found 1e\n" +
    +#    "[2019-11-17 16:32:03.697] DEBUG -- : data-processor 12 got d\n" +
    +#    "[2019-11-17 16:32:03.698] DEBUG -- : data-processor 13 got e\n" +
    +#    "[2019-11-17 16:32:03.699] DEBUG -- : data-processor 14 got f\n" +
    +#    "[2019-11-17 16:32:03.699] DEBUG -- : data-processor 15 got 10\n" +
    +#    "[2019-11-17 16:32:03.710] DEBUG -- : data-processor 16 got 11\n" +
    +#    "[2019-11-17 16:32:03.710] DEBUG -- : data-processor 17 got 12\n" +
    +#    "[2019-11-17 16:32:03.714] DEBUG -- : data-processor 18 got 13\n" +
    +#    "[2019-11-17 16:32:03.714] DEBUG -- : data-processor 19 got 14\n" +
    +#    "[2019-11-17 16:32:03.723] DEBUG -- : data-processor 1 got 15\n" +
    +#    "[2019-11-17 16:32:03.724] DEBUG -- : crawler 0 found 1f\n" +
    +#    "[2019-11-17 16:32:03.724] DEBUG -- : crawler 1 found 20\n" +
    +#    "[2019-11-17 16:32:03.725] DEBUG -- : crawler 2 found 21\n" +
    +#    "[2019-11-17 16:32:03.725] DEBUG -- : crawler 3 found 22\n" +
    +#    "[2019-11-17 16:32:03.727] DEBUG -- : data-processor 0 got 16\n" +
    +#    "[2019-11-17 16:32:03.727] DEBUG -- : data-processor 2 got 17\n" +
    +#    "[2019-11-17 16:32:03.728] DEBUG -- : data-processor 3 got 18\n" +
    +#    "[2019-11-17 16:32:03.734] DEBUG -- : crawler 0 found 23\n" +
    +#    "[2019-11-17 16:32:03.734] DEBUG -- : crawler 1 found 24\n" +
    +#    "[2019-11-17 16:32:03.735] DEBUG -- : crawler 2 found 25\n" +
    +#    "[2019-11-17 16:32:03.736] DEBUG -- : crawler 3 found 26\n" +
    +#    "[2019-11-17 16:32:03.802] DEBUG -- : data-processor 6 got 19\n" +
    +#    "[2019-11-17 16:32:03.803] DEBUG -- : data-processor 4 got 1a\n" +
    +#    "[2019-11-17 16:32:03.803] DEBUG -- : data-processor 5 got 1b\n" +
    +#    "[2019-11-17 16:32:03.804] DEBUG -- : data-processor 7 got 1c\n" +
    +#    "[2019-11-17 16:32:03.816] DEBUG -- : data-processor 8 got 1d\n" +
    +#    "[2019-11-17 16:32:03.817] DEBUG -- : data-processor 9 got 1e\n" +
    +#    "[2019-11-17 16:32:03.817] DEBUG -- : data-processor 10 got 1f\n" +
    +#    "[2019-11-17 16:32:03.817] DEBUG -- : data-processor 11 got 20\n" +
    +#    "[2019-11-17 16:32:03.818] DEBUG -- : crawler 0 found 27\n" +
    +#    "[2019-11-17 16:32:03.818] DEBUG -- : crawler 1 found 28\n" +
    +#    "[2019-11-17 16:32:03.818] DEBUG -- : crawler 2 found 29\n" +
    +#    "[2019-11-17 16:32:03.819] DEBUG -- : crawler 3 found 2a\n" +
    +#    "[2019-11-17 16:32:03.828] DEBUG -- : data-processor 12 got 21\n" +
    +#    "[2019-11-17 16:32:03.829] DEBUG -- : crawler 1 found 2b\n" +
    +#    "[2019-11-17 16:32:03.829] DEBUG -- : crawler 2 found 2c\n" +
    +#    "[2019-11-17 16:32:03.830] DEBUG -- : crawler 3 found 2d\n" +
    +#    "[2019-11-17 16:32:03.830] DEBUG -- : crawler 0 found 2e\n" +
    +#    "[2019-11-17 16:32:03.831] DEBUG -- : data-processor 13 got 22\n" +
    +#    "[2019-11-17 16:32:03.832] DEBUG -- : data-processor 14 got 23\n" +
    +#    "[2019-11-17 16:32:03.832] DEBUG -- : data-processor 15 got 24\n" +
    +#    "[2019-11-17 16:32:03.907] DEBUG -- : data-processor 17 got 25\n" +
    +#    "[2019-11-17 16:32:03.908] DEBUG -- : data-processor 18 got 26\n" +
    +#    "[2019-11-17 16:32:03.908] DEBUG -- : crawler 1 found 2f\n" +
    +#    "[2019-11-17 16:32:03.909] DEBUG -- : crawler 2 found 30\n" +
    +#    "[2019-11-17 16:32:03.909] DEBUG -- : crawler 3 found 31\n" +
    +#    "[2019-11-17 16:32:03.910] DEBUG -- : crawler 0 found 32\n" +
    +#    "[2019-11-17 16:32:03.910] DEBUG -- : data-processor 16 got 27\n" +
    +#    "[2019-11-17 16:32:03.911] DEBUG -- : data-processor 19 got 28\n" +
    +#    "[2019-11-17 16:32:03.918] DEBUG -- : crawler 1 found 33\n" +
    +#    "[2019-11-17 16:32:03.919] DEBUG -- : crawler 2 found 34\n" +
    +#    "[2019-11-17 16:32:03.923] DEBUG -- : crawler 3 found 35\n" +
    +#    "[2019-11-17 16:32:03.923] DEBUG -- : crawler 0 found 36\n" +
    +#    "[2019-11-17 16:32:03.924] DEBUG -- : data-processor 1 got 29\n" +
    +#    "[2019-11-17 16:32:03.924] DEBUG -- : data-processor 0 got 2a\n" +
    +#    "[2019-11-17 16:32:03.924] DEBUG -- : data-processor 2 got 2b\n" +
    +#    "[2019-11-17 16:32:03.925] DEBUG -- : data-processor 3 got 2c\n" +
    +#    "[2019-11-17 16:32:03.933] DEBUG -- : data-processor 4 got 2d\n" +
    +#    "[2019-11-17 16:32:03.933] DEBUG -- : crawler 1 found 37\n" +
    +#    "[2019-11-17 16:32:03.934] DEBUG -- : crawler 2 found 38\n" +
    +#    "[2019-11-17 16:32:03.934] DEBUG -- : crawler 3 found 39\n" +
    +#    "[2019-11-17 16:32:03.935] DEBUG -- : crawler 0 found 3a\n" +
    +#    "[2019-11-17 16:32:03.935] DEBUG -- : data-processor 7 got 2e\n" +
    +#    "[2019-11-17 16:32:03.936] DEBUG -- : data-processor 6 got 2f\n" +
    +#    "[2019-11-17 16:32:03.936] DEBUG -- : data-processor 5 got 30\n" +
    +#    "[2019-11-17 16:32:03.946] DEBUG -- : crawler 1 found 3b\n" +
    +#    "[2019-11-17 16:32:03.947] DEBUG -- : crawler 2 found 3c\n" +
    +#    "[2019-11-17 16:32:03.947] DEBUG -- : crawler 3 found 3d\n" +
    +#    "[2019-11-17 16:32:03.948] DEBUG -- : crawler 0 found 3e\n" +
    +#    "[2019-11-17 16:32:03.981]  INFO -- : \n" +
    +#    "crawlers found: 15, 15, 16, 16\n" +
    +#    "data processors consumed: 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2\n" +
    +#    "[2019-11-17 16:32:04.010] DEBUG -- : data-processor 8 got 31\n" +
    +#    "[2019-11-17 16:32:04.011] DEBUG -- : data-processor 9 got 32\n" +
    +#    "[2019-11-17 16:32:04.012] DEBUG -- : data-processor 10 got 33\n" +
    +#    "[2019-11-17 16:32:04.012] DEBUG -- : data-processor 11 got 34\n" +
    +#    "[2019-11-17 16:32:04.030] DEBUG -- : data-processor 12 got 35\n" +
    +#    "[2019-11-17 16:32:04.031] DEBUG -- : data-processor 15 got 36\n" +
    +#    "[2019-11-17 16:32:04.031] DEBUG -- : data-processor 13 got 37\n" +
    +#    "[2019-11-17 16:32:04.032] DEBUG -- : data-processor 14 got 38\n" +
    +#    "[2019-11-17 16:32:04.032] DEBUG -- : crawler 1 found 3f\n" +
    +#    "[2019-11-17 16:32:04.032] DEBUG -- : crawler 2 found 40\n" +
    +#    "[2019-11-17 16:32:04.033] DEBUG -- : crawler 3 found 41\n" +
    +#    "[2019-11-17 16:32:04.033] DEBUG -- : crawler 0 found 42\n" +
    +#    "[2019-11-17 16:32:04.038] DEBUG -- : data-processor 17 got 39\n" +
    +#    "[2019-11-17 16:32:04.040] DEBUG -- : data-processor 16 got 3a\n" +
    +#    "[2019-11-17 16:32:04.041] DEBUG -- : data-processor 18 got 3b\n" +
    +#    "[2019-11-17 16:32:04.041] DEBUG -- : data-processor 19 got 3c\n" +
    +#    "[2019-11-17 16:32:04.043] DEBUG -- : crawler 1 found 43\n" +
    +#    "[2019-11-17 16:32:04.043] DEBUG -- : crawler 2 found 44\n" +
    +#    "[2019-11-17 16:32:04.044] DEBUG -- : crawler 0 found 45\n" +
    +#    "[2019-11-17 16:32:04.044] DEBUG -- : crawler 3 found 46\n" +
    +#    "[2019-11-17 16:32:04.118] DEBUG -- : data-processor 2 got 3d\n" +
    +#    "[2019-11-17 16:32:04.118] DEBUG -- : data-processor 3 got 3e\n" +
    +#    "[2019-11-17 16:32:04.119] DEBUG -- : data-processor 1 got 3f\n" +
    +#    "[2019-11-17 16:32:04.120] DEBUG -- : data-processor 0 got 40\n" +
    +#    "[2019-11-17 16:32:04.120] DEBUG -- : crawler 1 found 47\n" +
    +#    "[2019-11-17 16:32:04.121] DEBUG -- : crawler 2 found 48\n" +
    +#    "[2019-11-17 16:32:04.122] DEBUG -- : crawler 0 found 49\n" +
    +#    "[2019-11-17 16:32:04.123] DEBUG -- : crawler 3 found 4a\n" +
    +#    "[2019-11-17 16:32:04.129] DEBUG -- : crawler 1 found 4b\n" +
    +#    "[2019-11-17 16:32:04.130] DEBUG -- : crawler 2 found 4c\n" +
    +#    "[2019-11-17 16:32:04.131] DEBUG -- : crawler 3 found 4d\n" +
    +#    "[2019-11-17 16:32:04.131] DEBUG -- : crawler 0 found 4e\n" +
    +#    "[2019-11-17 16:32:04.134] DEBUG -- : data-processor 4 got 41\n" +
    +#    "[2019-11-17 16:32:04.135] DEBUG -- : data-processor 6 got 42\n" +
    +#    "[2019-11-17 16:32:04.135] DEBUG -- : data-processor 7 got 43\n" +
    +#    "[2019-11-17 16:32:04.136] DEBUG -- : data-processor 5 got 44\n" +
    +#    "[2019-11-17 16:32:04.143] DEBUG -- : data-processor 9 got 45\n" +
    +#    "[2019-11-17 16:32:04.143] DEBUG -- : crawler 3 found 52\n" +
    +#    "[2019-11-17 16:32:04.145] DEBUG -- : crawler 1 found 4f\n" +
    +#    "[2019-11-17 16:32:04.145] DEBUG -- : crawler 0 found 50\n" +
    +#    "[2019-11-17 16:32:04.145] DEBUG -- : crawler 2 found 51\n" +
    +#    "[2019-11-17 16:32:04.146] DEBUG -- : data-processor 11 got 46\n" +
    +#    "[2019-11-17 16:32:04.146] DEBUG -- : data-processor 8 got 47\n" +
    +#    "[2019-11-17 16:32:04.147] DEBUG -- : data-processor 10 got 48\n" +
    +#    "[2019-11-17 16:32:04.155] DEBUG -- : crawler 3 found 53\n" +
    +#    "[2019-11-17 16:32:04.156] DEBUG -- : crawler 1 found 54\n" +
    +#    "[2019-11-17 16:32:04.156] DEBUG -- : crawler 0 found 55\n" +
    +#    "[2019-11-17 16:32:04.157] DEBUG -- : crawler 2 found 56\n" +
    +#    "[2019-11-17 16:32:04.221] DEBUG -- : data-processor 13 got 49\n" +
    +#    "[2019-11-17 16:32:04.221] DEBUG -- : data-processor 12 got 4a\n" +
    +#    "[2019-11-17 16:32:04.222] DEBUG -- : data-processor 15 got 4b\n" +
    +#    "[2019-11-17 16:32:04.223] DEBUG -- : data-processor 14 got 4c\n" +
    +#    "[2019-11-17 16:32:04.245] DEBUG -- : data-processor 17 got 4d\n" +
    +#    "[2019-11-17 16:32:04.245] DEBUG -- : data-processor 18 got 4e\n" +
    +#    "[2019-11-17 16:32:04.245] DEBUG -- : data-processor 16 got 4f\n" +
    +#    "[2019-11-17 16:32:04.246] DEBUG -- : data-processor 19 got 50\n" +
    +#    "[2019-11-17 16:32:04.246] DEBUG -- : crawler 3 found 57\n" +
    +#    "[2019-11-17 16:32:04.247] DEBUG -- : crawler 1 found 58\n" +
    +#    "[2019-11-17 16:32:04.247] DEBUG -- : crawler 0 found 59\n" +
    +#    "[2019-11-17 16:32:04.248] DEBUG -- : crawler 2 found 5a\n" +
    +#    "[2019-11-17 16:32:04.248] DEBUG -- : data-processor 1 got 51\n" +
    +#    "[2019-11-17 16:32:04.248] DEBUG -- : data-processor 0 got 52\n" +
    +#    "[2019-11-17 16:32:04.249] DEBUG -- : data-processor 2 got 53\n" +
    +#    "[2019-11-17 16:32:04.249] DEBUG -- : data-processor 3 got 54\n" +
    +#    "[2019-11-17 16:32:04.258] DEBUG -- : crawler 3 found 5b\n" +
    +#    "[2019-11-17 16:32:04.259] DEBUG -- : crawler 1 found 5c\n" +
    +#    "[2019-11-17 16:32:04.259] DEBUG -- : crawler 0 found 5d\n" +
    +#    "[2019-11-17 16:32:04.260] DEBUG -- : crawler 2 found 5e\n" +
    +#    "[2019-11-17 16:32:04.323] DEBUG -- : data-processor 7 got 55\n" +
    +#    "[2019-11-17 16:32:04.324] DEBUG -- : data-processor 5 got 56\n" +
    +#    "[2019-11-17 16:32:04.324] DEBUG -- : data-processor 4 got 57\n" +
    +#    "[2019-11-17 16:32:04.325] DEBUG -- : crawler 3 found 5f\n" +
    +#    "[2019-11-17 16:32:04.325] DEBUG -- : crawler 0 found 60\n" +
    +#    "[2019-11-17 16:32:04.326] DEBUG -- : crawler 1 found 61\n" +
    +#    "[2019-11-17 16:32:04.326] DEBUG -- : crawler 2 found 62\n" +
    +#    "[2019-11-17 16:32:04.327] DEBUG -- : data-processor 6 got 58\n" +
    +#    "[2019-11-17 16:32:04.336] DEBUG -- : crawler 3 found 63\n" +
    +#    "[2019-11-17 16:32:04.337] DEBUG -- : crawler 0 found 64\n" +
    +#    "[2019-11-17 16:32:04.338] DEBUG -- : crawler 1 found 65\n" +
    +#    "[2019-11-17 16:32:04.338] DEBUG -- : crawler 2 found 66\n" +
    +#    "[2019-11-17 16:32:04.348] DEBUG -- : data-processor 9 got 59\n" +
    +#    "[2019-11-17 16:32:04.349] DEBUG -- : data-processor 11 got 5a\n" +
    +#    "[2019-11-17 16:32:04.351] DEBUG -- : data-processor 8 got 5b\n" +
    +#    "[2019-11-17 16:32:04.352] DEBUG -- : data-processor 10 got 5c\n" +
    +#    "[2019-11-17 16:32:04.352] DEBUG -- : data-processor 13 got 5d\n" +
    +#    "[2019-11-17 16:32:04.352] DEBUG -- : data-processor 12 got 5e\n" +
    +#    "[2019-11-17 16:32:04.353] DEBUG -- : data-processor 15 got 5f\n" +
    +#    "[2019-11-17 16:32:04.354] DEBUG -- : data-processor 14 got 60\n" +
    +#    "[2019-11-17 16:32:04.354] DEBUG -- : crawler 2 found 67\n" +
    +#    "[2019-11-17 16:32:04.355] DEBUG -- : crawler 1 found 68\n" +
    +#    "[2019-11-17 16:32:04.355] DEBUG -- : crawler 3 found 69\n" +
    +#    "[2019-11-17 16:32:04.356] DEBUG -- : crawler 0 found 6a\n" +
    +#    "[2019-11-17 16:32:04.365] DEBUG -- : crawler 2 found 6b\n" +
    +#    "[2019-11-17 16:32:04.366] DEBUG -- : crawler 1 found 6c\n" +
    +#    "[2019-11-17 16:32:04.366] DEBUG -- : crawler 0 found 6d\n" +
    +#    "[2019-11-17 16:32:04.367] DEBUG -- : crawler 3 found 6e\n" +
    +#    "[2019-11-17 16:32:04.386]  INFO -- : \n" +
    +#    "crawlers found: 27, 27, 28, 28\n" +
     #    "data processors consumed: 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4\n" +
    -#    "[2019-03-11 10:13:03.715] DEBUG -- : data-processor 17 got 61\n" +
    -#    "[2019-03-11 10:13:03.717] DEBUG -- : data-processor 16 got 62\n" +
    -#    "[2019-03-11 10:13:03.717] DEBUG -- : data-processor 19 got 63\n" +
    -#    "[2019-03-11 10:13:03.718] DEBUG -- : data-processor 18 got 64\n" +
    -#    "[2019-03-11 10:13:03.731] DEBUG -- : data-processor 0 got 65\n" +
    -#    "[2019-03-11 10:13:03.736] DEBUG -- : data-processor 3 got 66\n" +
    -#    "[2019-03-11 10:13:03.737] DEBUG -- : data-processor 2 got 67\n" +
    -#    "[2019-03-11 10:13:03.738] DEBUG -- : data-processor 1 got 68\n" +
    -#    "[2019-03-11 10:13:03.819] DEBUG -- : data-processor 7 got 69\n" +
    -#    "[2019-03-11 10:13:03.820] DEBUG -- : crawler 3 found 75\n" +
    -#    "[2019-03-11 10:13:03.821] DEBUG -- : crawler 2 found 73\n" +
    -#    "[2019-03-11 10:13:03.822] DEBUG -- : crawler 0 found 74\n" +
    -#    "[2019-03-11 10:13:03.822] DEBUG -- : crawler 1 found 76\n" +
    -#    "[2019-03-11 10:13:03.823] DEBUG -- : data-processor 4 got 6a\n" +
    -#    "[2019-03-11 10:13:03.824] DEBUG -- : data-processor 5 got 6b\n" +
    -#    "[2019-03-11 10:13:03.824] DEBUG -- : data-processor 6 got 6c\n" +
    -#    "[2019-03-11 10:13:03.831] DEBUG -- : crawler 2 found 77\n" +
    -#    "[2019-03-11 10:13:03.832] DEBUG -- : crawler 0 found 78\n" +
    -#    "[2019-03-11 10:13:03.833] DEBUG -- : crawler 1 found 79\n" +
    -#    "[2019-03-11 10:13:03.834] DEBUG -- : crawler 3 found 7a\n" +
    -#    "[2019-03-11 10:13:03.835] DEBUG -- : data-processor 11 got 6d\n" +
    -#    "[2019-03-11 10:13:03.840] DEBUG -- : data-processor 10 got 6e\n" +
    -#    "[2019-03-11 10:13:03.842] DEBUG -- : data-processor 9 got 6f\n" +
    -#    "[2019-03-11 10:13:03.843] DEBUG -- : data-processor 8 got 70\n" +
    -#    "[2019-03-11 10:13:03.843] DEBUG -- : crawler 1 found 7b\n" +
    -#    "[2019-03-11 10:13:03.844] DEBUG -- : crawler 3 found 7c\n" +
    -#    "[2019-03-11 10:13:03.845] DEBUG -- : crawler 0 found 7d\n" +
    -#    "[2019-03-11 10:13:03.846] DEBUG -- : crawler 2 found 7e\n" +
    -#    "[2019-03-11 10:13:03.854] DEBUG -- : crawler 1 found 7f\n" +
    -#    "[2019-03-11 10:13:03.924] DEBUG -- : data-processor 13 got 71\n" +
    -#    "[2019-03-11 10:13:03.926] DEBUG -- : data-processor 14 got 72\n" +
    -#    "[2019-03-11 10:13:03.926] DEBUG -- : data-processor 12 got 74\n" +
    -#    "[2019-03-11 10:13:03.927] DEBUG -- : data-processor 15 got 75\n" +
    -#    "[2019-03-11 10:13:03.937] DEBUG -- : data-processor 17 got 76\n" +
    -#    "[2019-03-11 10:13:03.947] DEBUG -- : data-processor 16 got 73\n" +
    -#    "[2019-03-11 10:13:03.948] DEBUG -- : data-processor 18 got 77\n" +
    -#    "[2019-03-11 10:13:03.949] DEBUG -- : crawler 0 found 80\n" +
    -#    "[2019-03-11 10:13:03.950] DEBUG -- : crawler 2 found 81\n" +
    -#    "[2019-03-11 10:13:03.951] DEBUG -- : crawler 3 found 82\n" +
    -#    "[2019-03-11 10:13:03.951] DEBUG -- : data-processor 19 got 78\n" +
    -#    "[2019-03-11 10:13:03.952] DEBUG -- : crawler 1 found 83\n" +
    -#    "[2019-03-11 10:13:03.960] DEBUG -- : crawler 0 found 84\n" +
    -#    "[2019-03-11 10:13:03.961] DEBUG -- : crawler 2 found 85\n" +
    -#    "[2019-03-11 10:13:03.962] DEBUG -- : crawler 1 found 86\n" +
    -#    "[2019-03-11 10:13:03.962] DEBUG -- : crawler 3 found 87\n" +
    -#    "[2019-03-11 10:13:03.970] DEBUG -- : crawler 3 found 88\n" +
    -#    "[2019-03-11 10:13:03.971] DEBUG -- : crawler 1 found 89\n" +
    -#    "[2019-03-11 10:13:03.972] DEBUG -- : crawler 0 found 8a\n" +
    -#    "[2019-03-11 10:13:03.973] DEBUG -- : crawler 2 found 8b\n" +
    -#    "[2019-03-11 10:13:04.028] DEBUG -- : data-processor 0 got 79\n" +
    -#    "[2019-03-11 10:13:04.029] DEBUG -- : data-processor 3 got 7a\n" +
    -#    "[2019-03-11 10:13:04.029] DEBUG -- : data-processor 1 got 7b\n" +
    -#    "[2019-03-11 10:13:04.030] DEBUG -- : data-processor 2 got 7c\n" +
    -#    "[2019-03-11 10:13:04.040] DEBUG -- : data-processor 7 got 7d\n" +
    -#    "[2019-03-11 10:13:04.049] DEBUG -- : data-processor 4 got 7e\n" +
    -#    "[2019-03-11 10:13:04.050] DEBUG -- : data-processor 6 got 7f\n" +
    -#    "[2019-03-11 10:13:04.051] DEBUG -- : data-processor 5 got 80\n" +
    -#    "[2019-03-11 10:13:04.071]  INFO -- : \n" +
    -#    "crawlers found: 35, 35, 35, 34\n" +
    -#    "data processors consumed: 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6\n" +
    -#    "[2019-03-11 10:13:04.133] DEBUG -- : data-processor 11 got 81\n" +
    -#    "[2019-03-11 10:13:04.134] DEBUG -- : data-processor 10 got 82\n" +
    -#    "[2019-03-11 10:13:04.135] DEBUG -- : data-processor 8 got 83\n" +
    -#    "[2019-03-11 10:13:04.136] DEBUG -- : data-processor 9 got 84\n" +
    -#    "[2019-03-11 10:13:04.137] DEBUG -- : crawler 3 found 8c\n" +
    -#    "[2019-03-11 10:13:04.137] DEBUG -- : crawler 0 found 8d\n" +
    -#    "[2019-03-11 10:13:04.138] DEBUG -- : crawler 2 found 8f\n" +
    -#    "[2019-03-11 10:13:04.138] DEBUG -- : crawler 1 found 8e\n" +
    -#    "[2019-03-11 10:13:04.144] DEBUG -- : data-processor 12 got 85\n" +
    -#    "[2019-03-11 10:13:04.145] DEBUG -- : crawler 0 found 90\n" +
    -#    "[2019-03-11 10:13:04.146] DEBUG -- : crawler 2 found 91\n" +
    -#    "[2019-03-11 10:13:04.146] DEBUG -- : crawler 3 found 92\n" +
    -#    "[2019-03-11 10:13:04.147] DEBUG -- : crawler 1 found 93\n" +
    -#    "[2019-03-11 10:13:04.154] DEBUG -- : data-processor 15 got 86\n" +
    -#    "[2019-03-11 10:13:04.155] DEBUG -- : data-processor 14 got 87\n" +
    -#    "[2019-03-11 10:13:04.156] DEBUG -- : data-processor 13 got 88\n" +
    -#    "[2019-03-11 10:13:04.157] DEBUG -- : crawler 0 found 94\n" +
    -#    "[2019-03-11 10:13:04.157] DEBUG -- : crawler 2 found 95\n" +
    -#    "[2019-03-11 10:13:04.158] DEBUG -- : crawler 3 found 96\n" +
    -#    "[2019-03-11 10:13:04.235] DEBUG -- : data-processor 17 got 89\n" +
    -#    "[2019-03-11 10:13:04.237] DEBUG -- : data-processor 18 got 8a\n" +
    -#    "[2019-03-11 10:13:04.239] DEBUG -- : data-processor 19 got 8b\n" +
    -#    "[2019-03-11 10:13:04.239] DEBUG -- : data-processor 16 got 8c\n" +
    -#    "[2019-03-11 10:13:04.249] DEBUG -- : data-processor 3 got 8d\n" +
    -#    "[2019-03-11 10:13:04.250] DEBUG -- : crawler 1 found 97\n" +
    -#    "[2019-03-11 10:13:04.251] DEBUG -- : crawler 0 found 98\n" +
    -#    "[2019-03-11 10:13:04.251] DEBUG -- : crawler 2 found 99\n" +
    -#    "[2019-03-11 10:13:04.252] DEBUG -- : crawler 3 found 9a\n" +
    -#    "[2019-03-11 10:13:04.257] DEBUG -- : data-processor 0 got 8e\n" +
    -#    "[2019-03-11 10:13:04.258] DEBUG -- : data-processor 1 got 8f\n" +
    -#    "[2019-03-11 10:13:04.258] DEBUG -- : data-processor 2 got 90\n" +
    -#    "[2019-03-11 10:13:04.259] DEBUG -- : crawler 1 found 9b\n" +
    -#    "[2019-03-11 10:13:04.260] DEBUG -- : crawler 3 found 9c\n" +
    -#    "[2019-03-11 10:13:04.260] DEBUG -- : crawler 0 found 9d\n" +
    -#    "[2019-03-11 10:13:04.261] DEBUG -- : crawler 2 found 9e\n" +
    -#    "[2019-03-11 10:13:04.272] DEBUG -- : crawler 1 found 9f\n" +
    -#    "[2019-03-11 10:13:04.273] DEBUG -- : crawler 3 found a0\n" +
    -#    "[2019-03-11 10:13:04.274] DEBUG -- : crawler 2 found a1\n" +
    -#    "[2019-03-11 10:13:04.274] DEBUG -- : crawler 0 found a2\n" +
    -#    "[2019-03-11 10:13:04.340] DEBUG -- : data-processor 7 got 91\n" +
    -#    "[2019-03-11 10:13:04.342] DEBUG -- : data-processor 4 got 92\n" +
    -#    "[2019-03-11 10:13:04.342] DEBUG -- : data-processor 6 got 93\n" +
    -#    "[2019-03-11 10:13:04.343] DEBUG -- : data-processor 5 got 94\n" +
    -#    "[2019-03-11 10:13:04.353] DEBUG -- : data-processor 11 got 95\n" +
    -#    "[2019-03-11 10:13:04.361] DEBUG -- : data-processor 10 got 96\n" +
    -#    "[2019-03-11 10:13:04.362] DEBUG -- : data-processor 9 got 97\n" +
    -#    "[2019-03-11 10:13:04.363] DEBUG -- : data-processor 8 got 98\n" +
    -#    "[2019-03-11 10:13:04.446] DEBUG -- : data-processor 12 got 99\n" +
    -#    "[2019-03-11 10:13:04.447] DEBUG -- : data-processor 15 got 9a\n" +
    -#    "[2019-03-11 10:13:04.448] DEBUG -- : crawler 1 found a3\n" +
    -#    "[2019-03-11 10:13:04.449] DEBUG -- : crawler 3 found a4\n" +
    -#    "[2019-03-11 10:13:04.450] DEBUG -- : crawler 0 found a5\n" +
    -#    "[2019-03-11 10:13:04.450] DEBUG -- : crawler 2 found a6\n" +
    -#    "[2019-03-11 10:13:04.451] DEBUG -- : data-processor 13 got 9b\n" +
    -#    "[2019-03-11 10:13:04.452] DEBUG -- : data-processor 14 got 9c\n" +
    -#    "[2019-03-11 10:13:04.453]  INFO -- : \n" +
    -#    "crawlers found: 42, 41, 42, 41\n" +
    -#    "data processors consumed: 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7\n" +
    -#    "[2019-03-11 10:13:04.457] DEBUG -- : data-processor 18 got 9d\n" +
    -#    "[2019-03-11 10:13:04.458] DEBUG -- : crawler 0 found a7\n" +
    -#    "[2019-03-11 10:13:04.458] DEBUG -- : crawler 2 found a8\n" +
    -#    "[2019-03-11 10:13:04.459] DEBUG -- : crawler 3 found a9\n" +
    -#    "[2019-03-11 10:13:04.460] DEBUG -- : crawler 1 found aa\n" +
    -#    "[2019-03-11 10:13:04.466] DEBUG -- : data-processor 19 got 9e\n" +
    -#    "[2019-03-11 10:13:04.467] DEBUG -- : data-processor 16 got 9f\n" +
    -#    "[2019-03-11 10:13:04.468] DEBUG -- : data-processor 17 got a0\n" +
    -#    "[2019-03-11 10:13:04.549] DEBUG -- : data-processor 3 got a1\n" +
    -#    "[2019-03-11 10:13:04.550] DEBUG -- : data-processor 0 got a2\n" +
    -#    "[2019-03-11 10:13:04.551] DEBUG -- : data-processor 2 got a3\n" +
    -#    "[2019-03-11 10:13:04.552] DEBUG -- : data-processor 1 got a4\n"
    +# "[2019-11-17 16:32:04.427] DEBUG -- : data-processor 18 got 61\n" + +# "[2019-11-17 16:32:04.428] DEBUG -- : data-processor 16 got 62\n" + +# "[2019-11-17 16:32:04.429] DEBUG -- : data-processor 17 got 63\n" + +# "[2019-11-17 16:32:04.431] DEBUG -- : data-processor 19 got 64\n" + +# "[2019-11-17 16:32:04.457] DEBUG -- : data-processor 1 got 65\n" + +# "[2019-11-17 16:32:04.458] DEBUG -- : data-processor 0 got 66\n" + +# "[2019-11-17 16:32:04.458] DEBUG -- : data-processor 2 got 67\n" + +# "[2019-11-17 16:32:04.460] DEBUG -- : data-processor 3 got 68\n" + +# "[2019-11-17 16:32:04.460] DEBUG -- : crawler 1 found 6f\n" + +# "[2019-11-17 16:32:04.460] DEBUG -- : crawler 2 found 70\n" + +# "[2019-11-17 16:32:04.461] DEBUG -- : crawler 0 found 71\n" + +# "[2019-11-17 16:32:04.462] DEBUG -- : crawler 3 found 72\n" + +# "[2019-11-17 16:32:04.462] DEBUG -- : data-processor 4 got 69\n" + +# "[2019-11-17 16:32:04.463] DEBUG -- : data-processor 5 got 6a\n" + +# "[2019-11-17 16:32:04.463] DEBUG -- : data-processor 7 got 6b\n" + +# "[2019-11-17 16:32:04.463] DEBUG -- : data-processor 6 got 6c\n" + +# "[2019-11-17 16:32:04.469] DEBUG -- : crawler 1 found 73\n" + +# "[2019-11-17 16:32:04.470] DEBUG -- : crawler 2 found 74\n" + +# "[2019-11-17 16:32:04.471] DEBUG -- : crawler 0 found 75\n" + +# "[2019-11-17 16:32:04.472] DEBUG -- : crawler 3 found 76\n" + +# "[2019-11-17 16:32:04.535] DEBUG -- : data-processor 10 got 6d\n" + +# "[2019-11-17 16:32:04.535] DEBUG -- : data-processor 9 got 6e\n" + +# "[2019-11-17 16:32:04.539] DEBUG -- : data-processor 12 got 6f\n" + +# "[2019-11-17 16:32:04.540] DEBUG -- : crawler 3 found 77\n" + +# "[2019-11-17 16:32:04.540] DEBUG -- : data-processor 13 got 70\n" + +# "[2019-11-17 16:32:04.540] DEBUG -- : crawler 2 found 78\n" + +# "[2019-11-17 16:32:04.541] DEBUG -- : crawler 1 found 79\n" + +# "[2019-11-17 16:32:04.541] DEBUG -- : crawler 0 found 7a\n" + +# "[2019-11-17 16:32:04.545] DEBUG -- : crawler 3 found 7b\n" + +# "[2019-11-17 16:32:04.546] DEBUG -- : crawler 2 found 7c\n" + +# "[2019-11-17 16:32:04.547] DEBUG -- : crawler 1 found 7d\n" + +# "[2019-11-17 16:32:04.547] DEBUG -- : crawler 0 found 7e\n" + +# "[2019-11-17 16:32:04.561] DEBUG -- : data-processor 14 got 71\n" + +# "[2019-11-17 16:32:04.562] DEBUG -- : data-processor 15 got 72\n" + +# "[2019-11-17 16:32:04.563] DEBUG -- : data-processor 11 got 73\n" + +# "[2019-11-17 16:32:04.563] DEBUG -- : data-processor 8 got 74\n" + +# "[2019-11-17 16:32:04.564] DEBUG -- : data-processor 18 got 75\n" + +# "[2019-11-17 16:32:04.564] DEBUG -- : data-processor 19 got 76\n" + +# "[2019-11-17 16:32:04.564] DEBUG -- : data-processor 16 got 77\n" + +# "[2019-11-17 16:32:04.565] DEBUG -- : data-processor 17 got 78\n" + +# "[2019-11-17 16:32:04.565] DEBUG -- : crawler 3 found 7f\n" + +# "[2019-11-17 16:32:04.565] DEBUG -- : crawler 2 found 80\n" + +# "[2019-11-17 16:32:04.566] DEBUG -- : crawler 1 found 81\n" + +# "[2019-11-17 16:32:04.566] DEBUG -- : crawler 0 found 82\n" + +# "[2019-11-17 16:32:04.575] DEBUG -- : crawler 3 found 83\n" + +# "[2019-11-17 16:32:04.640] DEBUG -- : data-processor 5 got 79\n" + +# "[2019-11-17 16:32:04.641] DEBUG -- : data-processor 1 got 7a\n" + +# "[2019-11-17 16:32:04.642] DEBUG -- : data-processor 3 got 7b\n" + +# "[2019-11-17 16:32:04.642] DEBUG -- : data-processor 0 got 7c\n" + +# "[2019-11-17 16:32:04.642] DEBUG -- : crawler 2 found 84\n" + +# "[2019-11-17 16:32:04.643] DEBUG -- : crawler 1 found 85\n" + +# "[2019-11-17 16:32:04.643] DEBUG -- : crawler 0 found 86\n" + +# "[2019-11-17 16:32:04.644] DEBUG -- : crawler 3 found 87\n" + +# "[2019-11-17 16:32:04.653] DEBUG -- : crawler 2 found 88\n" + +# "[2019-11-17 16:32:04.654] DEBUG -- : crawler 1 found 89\n" + +# "[2019-11-17 16:32:04.654] DEBUG -- : crawler 0 found 8a\n" + +# "[2019-11-17 16:32:04.654] DEBUG -- : crawler 3 found 8b\n" + +# "[2019-11-17 16:32:04.666] DEBUG -- : data-processor 4 got 7d\n" + +# "[2019-11-17 16:32:04.667] DEBUG -- : data-processor 6 got 7e\n" + +# "[2019-11-17 16:32:04.669] DEBUG -- : data-processor 2 got 7f\n" + +# "[2019-11-17 16:32:04.669] DEBUG -- : data-processor 7 got 80\n" + +# "[2019-11-17 16:32:04.670] DEBUG -- : data-processor 10 got 81\n" + +# "[2019-11-17 16:32:04.670] DEBUG -- : crawler 1 found 8c\n" + +# "[2019-11-17 16:32:04.671] DEBUG -- : crawler 2 found 8d\n" + +# "[2019-11-17 16:32:04.671] DEBUG -- : crawler 3 found 8e\n" + +# "[2019-11-17 16:32:04.671] DEBUG -- : data-processor 12 got 84\n" + +# "[2019-11-17 16:32:04.672] DEBUG -- : data-processor 14 got 85\n" + +# "[2019-11-17 16:32:04.672] DEBUG -- : data-processor 11 got 86\n" + +# "[2019-11-17 16:32:04.672] DEBUG -- : crawler 0 found 8f\n" + +# "[2019-11-17 16:32:04.678] DEBUG -- : crawler 1 found 90\n" + +# "[2019-11-17 16:32:04.678] DEBUG -- : crawler 2 found 91\n" + +# "[2019-11-17 16:32:04.680] DEBUG -- : crawler 3 found 92\n" + +# "[2019-11-17 16:32:04.681] DEBUG -- : crawler 0 found 93\n" + +# "[2019-11-17 16:32:04.688] DEBUG -- : crawler 1 found 94\n" + +# "[2019-11-17 16:32:04.738] DEBUG -- : data-processor 15 got 87\n" + +# "[2019-11-17 16:32:04.743] DEBUG -- : data-processor 18 got 88\n" + +# "[2019-11-17 16:32:04.743] DEBUG -- : data-processor 8 got 89\n" + +# "[2019-11-17 16:32:04.744] DEBUG -- : data-processor 16 got 8a\n" + +# "[2019-11-17 16:32:04.772] DEBUG -- : data-processor 9 got 82\n" + +# "[2019-11-17 16:32:04.772] DEBUG -- : data-processor 13 got 83\n" + +# "[2019-11-17 16:32:04.773] DEBUG -- : data-processor 17 got 8b\n" + +# "[2019-11-17 16:32:04.773] DEBUG -- : data-processor 19 got 8c\n" + +# "[2019-11-17 16:32:04.774] DEBUG -- : data-processor 5 got 8d\n" + +# "[2019-11-17 16:32:04.774] DEBUG -- : data-processor 0 got 8e\n" + +# "[2019-11-17 16:32:04.774] DEBUG -- : data-processor 1 got 8f\n" + +# "[2019-11-17 16:32:04.775] DEBUG -- : data-processor 3 got 90\n" + +# "[2019-11-17 16:32:04.775] DEBUG -- : crawler 2 found 95\n" + +# "[2019-11-17 16:32:04.776] DEBUG -- : crawler 3 found 96\n" + +# "[2019-11-17 16:32:04.778] DEBUG -- : crawler 0 found 97\n" + +# "[2019-11-17 16:32:04.778] DEBUG -- : crawler 1 found 98\n" + +# "[2019-11-17 16:32:04.785] DEBUG -- : crawler 2 found 99\n" + +# "[2019-11-17 16:32:04.785] DEBUG -- : crawler 0 found 9a\n" + +# "[2019-11-17 16:32:04.786] INFO -- : \n" + +# "crawlers found: 38, 38, 39, 39\n" + +# "data processors consumed: 8, 8, 7, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7\n" + +# "[2019-11-17 16:32:04.841] DEBUG -- : data-processor 7 got 91\n" + +# "[2019-11-17 16:32:04.841] DEBUG -- : crawler 3 found 9b\n" + +# "[2019-11-17 16:32:04.842] DEBUG -- : crawler 1 found 9c\n" + +# "[2019-11-17 16:32:04.842] DEBUG -- : crawler 2 found 9d\n" + +# "[2019-11-17 16:32:04.843] DEBUG -- : crawler 0 found 9e\n" + +# "[2019-11-17 16:32:04.843] DEBUG -- : data-processor 10 got 92\n" + +# "[2019-11-17 16:32:04.844] DEBUG -- : data-processor 4 got 93\n" + +# "[2019-11-17 16:32:04.844] DEBUG -- : data-processor 12 got 94\n" + +# "[2019-11-17 16:32:04.853] DEBUG -- : crawler 3 found 9f\n" + +# "[2019-11-17 16:32:04.854] DEBUG -- : crawler 1 found a0\n" + +# "[2019-11-17 16:32:04.854] DEBUG -- : crawler 2 found a1\n" + +# "[2019-11-17 16:32:04.855] DEBUG -- : crawler 0 found a2\n" + +# "[2019-11-17 16:32:04.876] DEBUG -- : data-processor 14 got 95\n" + +# "[2019-11-17 16:32:04.877] DEBUG -- : data-processor 6 got 96\n" + +# "[2019-11-17 16:32:04.878] DEBUG -- : data-processor 2 got 97\n" + +# "[2019-11-17 16:32:04.878] DEBUG -- : data-processor 11 got 98\n" + +# "[2019-11-17 16:32:04.879] DEBUG -- : data-processor 15 got 99\n" + +# "[2019-11-17 16:32:04.879] DEBUG -- : data-processor 16 got 9a\n" + +# "[2019-11-17 16:32:04.879] DEBUG -- : data-processor 18 got 9b\n" + +# "[2019-11-17 16:32:04.880] DEBUG -- : data-processor 8 got 9c\n" + +# "[2019-11-17 16:32:04.880] DEBUG -- : crawler 3 found a3\n" + +# "[2019-11-17 16:32:04.881] DEBUG -- : crawler 1 found a4\n" + +# "[2019-11-17 16:32:04.881] DEBUG -- : crawler 2 found a5\n" + +# "[2019-11-17 16:32:04.881] DEBUG -- : crawler 0 found a6\n" + +# "[2019-11-17 16:32:04.947] DEBUG -- : data-processor 13 got 9d\n" + +# "[2019-11-17 16:32:04.947] DEBUG -- : data-processor 0 got 9e\n" + +# "[2019-11-17 16:32:04.948] DEBUG -- : data-processor 1 got 9f\n" + +# "[2019-11-17 16:32:04.948] DEBUG -- : data-processor 19 got a0\n" + +# "[2019-11-17 16:32:04.948] DEBUG -- : crawler 3 found a7\n" + +# "[2019-11-17 16:32:04.949] DEBUG -- : crawler 1 found a8\n" + +# "[2019-11-17 16:32:04.949] DEBUG -- : crawler 2 found a9\n" + +# "[2019-11-17 16:32:04.949] DEBUG -- : crawler 0 found aa\n" + +# "[2019-11-17 16:32:04.959] DEBUG -- : crawler 3 found ab\n" + +# "[2019-11-17 16:32:04.960] DEBUG -- : crawler 1 found ac\n" + +# "[2019-11-17 16:32:04.961] DEBUG -- : crawler 2 found ad\n" + +# "[2019-11-17 16:32:04.961] DEBUG -- : crawler 0 found ae\n" + +# "[2019-11-17 16:32:04.980] DEBUG -- : data-processor 3 got a1\n" + +# "[2019-11-17 16:32:04.982] DEBUG -- : data-processor 9 got a2\n" + +# "[2019-11-17 16:32:04.983] DEBUG -- : data-processor 17 got a3\n" + +# "[2019-11-17 16:32:04.983] DEBUG -- : data-processor 5 got a4\n" + +# "[2019-11-17 16:32:04.984] DEBUG -- : data-processor 10 got a5\n" + +# "[2019-11-17 16:32:04.984] DEBUG -- : data-processor 4 got a6\n" + +# "[2019-11-17 16:32:04.985] DEBUG -- : data-processor 12 got a7\n" + +# "[2019-11-17 16:32:04.985] DEBUG -- : data-processor 7 got a8\n" + +# "[2019-11-17 16:32:04.985] DEBUG -- : crawler 3 found af\n" + +# "[2019-11-17 16:32:04.986] DEBUG -- : crawler 1 found b0\n" + +# "[2019-11-17 16:32:04.986] DEBUG -- : crawler 2 found b1\n" + +# "[2019-11-17 16:32:04.986] DEBUG -- : crawler 0 found b2\n" + +# "[2019-11-17 16:32:04.996] DEBUG -- : crawler 3 found b3\n" + +# "[2019-11-17 16:32:04.997] DEBUG -- : crawler 1 found b4\n" + +# "[2019-11-17 16:32:05.053] DEBUG -- : data-processor 14 got a9\n" + +# "[2019-11-17 16:32:05.054] DEBUG -- : data-processor 6 got aa\n" + +# "[2019-11-17 16:32:05.054] DEBUG -- : data-processor 11 got ab\n" + +# "[2019-11-17 16:32:05.055] DEBUG -- : data-processor 18 got ac\n" + +# "[2019-11-17 16:32:05.055] DEBUG -- : crawler 2 found b5\n" + +# "[2019-11-17 16:32:05.056] DEBUG -- : crawler 0 found b6\n" + +# "[2019-11-17 16:32:05.056] DEBUG -- : crawler 1 found b7\n" + +# "[2019-11-17 16:32:05.056] DEBUG -- : crawler 3 found b8\n" + +# "[2019-11-17 16:32:05.064] DEBUG -- : crawler 2 found b9\n" + +# "[2019-11-17 16:32:05.065] DEBUG -- : crawler 0 found ba\n" + +# "[2019-11-17 16:32:05.065] DEBUG -- : crawler 1 found bb\n" + +# "[2019-11-17 16:32:05.085] DEBUG -- : data-processor 8 got ad\n" + +# "[2019-11-17 16:32:05.087] DEBUG -- : data-processor 2 got ae\n" + +# "[2019-11-17 16:32:05.087] DEBUG -- : data-processor 15 got af\n" + +# "[2019-11-17 16:32:05.087] DEBUG -- : data-processor 16 got b0\n" + +# "[2019-11-17 16:32:05.088] DEBUG -- : data-processor 13 got b1\n" + +# "[2019-11-17 16:32:05.088] DEBUG -- : data-processor 0 got b2\n" + +# "[2019-11-17 16:32:05.088] DEBUG -- : data-processor 1 got b3\n" + +# "[2019-11-17 16:32:05.089] DEBUG -- : data-processor 19 got b4\n" + +# "[2019-11-17 16:32:05.089] DEBUG -- : crawler 3 found bc\n" + +# "[2019-11-17 16:32:05.089] DEBUG -- : crawler 2 found bd\n" + +# "[2019-11-17 16:32:05.090] DEBUG -- : crawler 0 found be\n" + +# "[2019-11-17 16:32:05.090] DEBUG -- : crawler 1 found bf\n" + +# "[2019-11-17 16:32:05.097] DEBUG -- : crawler 3 found c0\n" + +# "[2019-11-17 16:32:05.157] DEBUG -- : data-processor 3 got b5\n" + +# "[2019-11-17 16:32:05.157] DEBUG -- : data-processor 9 got b6\n" + +# "[2019-11-17 16:32:05.157] DEBUG -- : data-processor 17 got b7\n" + +# "[2019-11-17 16:32:05.158] DEBUG -- : data-processor 12 got b8\n" + +# "[2019-11-17 16:32:05.158] DEBUG -- : crawler 2 found c1\n" + +# "[2019-11-17 16:32:05.158] DEBUG -- : crawler 0 found c2\n" + +# "[2019-11-17 16:32:05.159] DEBUG -- : crawler 1 found c3\n" + +# "[2019-11-17 16:32:05.159] DEBUG -- : crawler 3 found c4\n" + +# "[2019-11-17 16:32:05.167] DEBUG -- : crawler 0 found c5\n" + +# "[2019-11-17 16:32:05.167] DEBUG -- : crawler 3 found c6\n" + +# "[2019-11-17 16:32:05.190] DEBUG -- : data-processor 7 got b9\n" + +# "[2019-11-17 16:32:05.191] DEBUG -- : data-processor 10 got ba\n" + +# "[2019-11-17 16:32:05.192] DEBUG -- : data-processor 5 got bb\n" + +# "[2019-11-17 16:32:05.193] DEBUG -- : data-processor 4 got bc\n" + +# "[2019-11-17 16:32:05.193] DEBUG -- : data-processor 11 got bd\n" + +# "[2019-11-17 16:32:05.194] DEBUG -- : crawler 2 found c7\n" + +# "[2019-11-17 16:32:05.194] DEBUG -- : crawler 1 found c8\n" + +# "[2019-11-17 16:32:05.194] DEBUG -- : crawler 0 found c9\n" + +# "[2019-11-17 16:32:05.195] DEBUG -- : crawler 3 found ca\n" + +# "[2019-11-17 16:32:05.195] DEBUG -- : data-processor 14 got be\n" + +# "[2019-11-17 16:32:05.196] DEBUG -- : data-processor 6 got bf\n" + +# "[2019-11-17 16:32:05.196] DEBUG -- : data-processor 18 got c0\n" + +# "[2019-11-17 16:32:05.196] INFO -- : \n" + +# "crawlers found: 50, 50, 50, 52\n" + +# "data processors consumed: 10, 10, 9, 10, 10, 10, 10, 10, 9, 9, 10, 10, 10, 9, 10, 9, 9, 9, 10, 9\n" + +# "[2019-11-17 16:32:05.201] DEBUG -- : crawler 2 found cb\n" + +# "[2019-11-17 16:32:05.201] DEBUG -- : crawler 1 found cc\n" + +# "[2019-11-17 16:32:05.262] DEBUG -- : data-processor 15 got c1\n" + +# "[2019-11-17 16:32:05.263] DEBUG -- : data-processor 13 got c2\n" + +# "[2019-11-17 16:32:05.264] DEBUG -- : data-processor 8 got c3\n" + +# "[2019-11-17 16:32:05.264] DEBUG -- : data-processor 2 got c4\n" + +# "[2019-11-17 16:32:05.265] DEBUG -- : crawler 0 found cd\n" + +# "[2019-11-17 16:32:05.265] DEBUG -- : crawler 3 found ce\n" + +# "[2019-11-17 16:32:05.266] DEBUG -- : crawler 2 found cf\n" + +# "[2019-11-17 16:32:05.266] DEBUG -- : crawler 1 found d0\n" + +# "[2019-11-17 16:32:05.275] DEBUG -- : crawler 0 found d1\n" + +# "[2019-11-17 16:32:05.275] DEBUG -- : crawler 3 found d2\n" + +# "[2019-11-17 16:32:05.293] DEBUG -- : data-processor 16 got c5\n" + +# "[2019-11-17 16:32:05.293] DEBUG -- : data-processor 0 got c6\n" + +# "[2019-11-17 16:32:05.293] DEBUG -- : data-processor 1 got c7\n" + +# "[2019-11-17 16:32:05.294] DEBUG -- : data-processor 19 got c8\n" + +# "[2019-11-17 16:32:05.294] DEBUG -- : data-processor 3 got c9\n" + +# "[2019-11-17 16:32:05.294] DEBUG -- : data-processor 9 got ca\n" + +# "[2019-11-17 16:32:05.295] DEBUG -- : data-processor 17 got cb\n" + +# "[2019-11-17 16:32:05.295] DEBUG -- : data-processor 12 got cc\n" + +# "[2019-11-17 16:32:05.295] DEBUG -- : crawler 2 found d3\n" + +# "[2019-11-17 16:32:05.296] DEBUG -- : crawler 1 found d4\n" + +# "[2019-11-17 16:32:05.296] DEBUG -- : crawler 0 found d5\n" + +# "[2019-11-17 16:32:05.296] DEBUG -- : crawler 3 found d6\n" + +# "[2019-11-17 16:32:05.305] DEBUG -- : crawler 2 found d7\n" + +# "[2019-11-17 16:32:05.367] DEBUG -- : data-processor 5 got cd\n" + +# "[2019-11-17 16:32:05.368] DEBUG -- : data-processor 7 got ce\n" + +# "[2019-11-17 16:32:05.368] DEBUG -- : data-processor 10 got cf\n" + +# "[2019-11-17 16:32:05.368] DEBUG -- : data-processor 4 got d0\n" + +# "[2019-11-17 16:32:05.369] DEBUG -- : crawler 3 found d8\n" + +# "[2019-11-17 16:32:05.369] DEBUG -- : crawler 1 found d9\n" + +# "[2019-11-17 16:32:05.369] DEBUG -- : crawler 0 found da\n" + +# "[2019-11-17 16:32:05.370] DEBUG -- : crawler 2 found db\n" + +# "[2019-11-17 16:32:05.377] DEBUG -- : crawler 3 found dc\n" + +# "[2019-11-17 16:32:05.378] DEBUG -- : crawler 1 found dd\n" + +# "[2019-11-17 16:32:05.379] DEBUG -- : crawler 2 found de\n" + +# "[2019-11-17 16:32:05.392] DEBUG -- : data-processor 11 got d1\n" + +# "[2019-11-17 16:32:05.393] DEBUG -- : data-processor 14 got d2\n" + +# "[2019-11-17 16:32:05.399] DEBUG -- : data-processor 6 got d3\n" + +# "[2019-11-17 16:32:05.400] DEBUG -- : data-processor 18 got d4\n" + +# "[2019-11-17 16:32:05.400] DEBUG -- : data-processor 2 got d5\n" + +# "[2019-11-17 16:32:05.401] DEBUG -- : data-processor 15 got d6\n" + +# "[2019-11-17 16:32:05.401] DEBUG -- : data-processor 13 got d7\n" + +# "[2019-11-17 16:32:05.402] DEBUG -- : data-processor 8 got d8\n" + +# "[2019-11-17 16:32:05.402] DEBUG -- : crawler 0 found df\n" + +# "[2019-11-17 16:32:05.402] DEBUG -- : crawler 3 found e0\n" + +# "[2019-11-17 16:32:05.403] DEBUG -- : crawler 1 found e1\n" + +# "[2019-11-17 16:32:05.403] DEBUG -- : crawler 2 found e2\n" + +# "[2019-11-17 16:32:05.410] DEBUG -- : crawler 0 found e3\n" + +# "[2019-11-17 16:32:05.411] DEBUG -- : crawler 3 found e4\n" + +# "[2019-11-17 16:32:05.466] DEBUG -- : data-processor 0 got d9\n" + +# "[2019-11-17 16:32:05.467] DEBUG -- : data-processor 16 got da\n" + +# "[2019-11-17 16:32:05.473] DEBUG -- : data-processor 1 got db\n" + +# "[2019-11-17 16:32:05.473] DEBUG -- : data-processor 19 got dc\n" + +# "[2019-11-17 16:32:05.474] DEBUG -- : crawler 1 found e5\n" + +# "[2019-11-17 16:32:05.474] DEBUG -- : crawler 2 found e6\n" + +# "[2019-11-17 16:32:05.475] DEBUG -- : crawler 0 found e7\n" + +# "[2019-11-17 16:32:05.475] DEBUG -- : crawler 3 found e8\n" + +# "[2019-11-17 16:32:05.486] DEBUG -- : crawler 1 found e9\n" + +# "[2019-11-17 16:32:05.487] DEBUG -- : crawler 2 found ea\n" + +# "[2019-11-17 16:32:05.487] DEBUG -- : crawler 0 found eb\n" + +# "[2019-11-17 16:32:05.488] DEBUG -- : crawler 3 found ec\n" + +# "[2019-11-17 16:32:05.495] DEBUG -- : data-processor 12 got dd\n" + +# "[2019-11-17 16:32:05.495] DEBUG -- : data-processor 3 got de\n" + +# "[2019-11-17 16:32:05.501] DEBUG -- : data-processor 9 got df\n" + +# "[2019-11-17 16:32:05.502] DEBUG -- : data-processor 17 got e0\n" + +# "[2019-11-17 16:32:05.505] DEBUG -- : data-processor 5 got e1\n" + +# "[2019-11-17 16:32:05.506] DEBUG -- : data-processor 7 got e2\n" + +# "[2019-11-17 16:32:05.506] DEBUG -- : data-processor 10 got e3\n" + +# "[2019-11-17 16:32:05.506] DEBUG -- : data-processor 4 got e4\n" + +# "[2019-11-17 16:32:05.507] DEBUG -- : crawler 1 found ed\n" + +# "[2019-11-17 16:32:05.507] DEBUG -- : crawler 0 found ee\n" + +# "[2019-11-17 16:32:05.508] DEBUG -- : crawler 2 found ef\n" + +# "[2019-11-17 16:32:05.508] DEBUG -- : crawler 3 found f0\n" + +# "[2019-11-17 16:32:05.516] DEBUG -- : crawler 0 found f1\n" + +# "[2019-11-17 16:32:05.517] DEBUG -- : crawler 2 found f2\n" + +# "[2019-11-17 16:32:05.571] DEBUG -- : data-processor 11 got e5\n" + +# "[2019-11-17 16:32:05.572] DEBUG -- : data-processor 14 got e6\n" + +# "[2019-11-17 16:32:05.576] DEBUG -- : data-processor 6 got e7\n" + +# "[2019-11-17 16:32:05.576] DEBUG -- : data-processor 18 got e8\n" + +# "[2019-11-17 16:32:05.583] INFO -- : \n" + +# "crawlers found: 60, 59, 61, 62\n" + +# "data processors consumed: 12, 12, 11, 12, 12, 12, 12, 12, 11, 11, 12, 12, 12, 11, 12, 11, 11, 11, 12, 11\n" + +# "[2019-11-17 16:32:05.618] DEBUG -- : crawler 1 found f3\n" + +# "[2019-11-17 16:32:05.619] DEBUG -- : crawler 3 found f4\n" + +# "[2019-11-17 16:32:05.633] DEBUG -- : crawler 0 found f5\n" + +# "[2019-11-17 16:32:05.633] DEBUG -- : crawler 2 found f6\n"