Class: Concurrent::WrappingExecutor

Inherits:
Synchronization::Object
  • Object
show all
Defined in:
lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb

Overview

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

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of WrappingExecutor.

Parameters:

  • executor (Executor)

    an executor to delegate the tasks to

Yields:

  • (*args, &task)

    A function which can modify the task with arguments

Yield Parameters:

  • *args (Array<Object>)

    the arguments submitted with the tasks

  • &task (block)

    the task submitted to the executor to be modified

Yield Returns:

  • (Array<Object>)

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



26
27
28
29
30
# File 'lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb', line 26

def initialize(executor, &wrapper)
  super()
  @Wrapper  = wrapper
  @Executor = executor
end

Instance Method Details

#can_overflow?Boolean

Does the task queue have a maximum size?

Returns:

  • (Boolean)

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



41
42
43
# File 'lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb', line 41

def can_overflow?
  @Executor.can_overflow?
end

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



35
36
37
38
# File 'lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb', line 35

def post(*args, &task)
  *args, task = @Wrapper.call(*args, &task)
  @Executor.post(*args, &task)
end

#serialized?Boolean

Does this executor guarantee serialization of its operations?

Returns:

  • (Boolean)

    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.



46
47
48
# File 'lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb', line 46

def serialized?
  @Executor.serialized?
end
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy