class
Croupier::Task
- Croupier::Task
- Reference
- Object
Overview
A Task is an object that may generate output
It has a Proc which is executed when the task is run
It can have zero or more inputs
It has zero or more outputs
Tasks are connected by dependencies, where one task's output is another's input
Included Modules
- YAML::Serializable
- YAML::Serializable::Strict
Defined in:
task.crConstructors
- .new(ctx : YAML::ParseContext, node : YAML::Nodes::Node)
- .new(outputs : Array(String) = [] of String, inputs : Array(String) = [] of String, no_save : Bool = false, id : String | Nil = nil, always_run : Bool = false, mergeable : Bool = true, mutex : String | Nil = nil, master_task : Bool = false, &block : TaskProc)
- .new(outputs : Array(String) = [] of String, inputs : Array(String) = [] of String, proc : TaskProc | Nil = nil, no_save : Bool = false, id : String | Nil = nil, always_run : Bool = false, mergeable : Bool = true, master_task : Bool = false)
- .new(output : String | Nil = nil, inputs : Array(String) = [] of String, no_save : Bool = false, id : String | Nil = nil, always_run : Bool = false, mergeable : Bool = true, mutex : String | Nil = nil, master_task : Bool = false, &block : TaskProc)
-
.new(output : String | Nil = nil, inputs : Array(String) = [] of String, proc : TaskProc | Nil = nil, no_save : Bool = false, id : String | Nil = nil, always_run : Bool = false, mergeable : Bool = true, master_task : Bool = false)
Create a task with zero or one outputs.
Instance Method Summary
- #always_run=(always_run : Bool)
- #always_run? : Bool
- #id : String
- #id=(id : String)
-
#inputs : Set(String)
The task's inputs: files, task ids or kv:// keys it depends on.
-
#inputs=(inputs : Set(String))
The task's inputs: files, task ids or kv:// keys it depends on.
-
#keys
Under what keys should this task be registered with TaskManager
-
#mark_dependency_fresh(input : String)
Mark that a dependency (input) is known to be unchanged.
- #master_task=(master_task : Bool)
- #master_task? : Bool
-
#merge(other : Task)
Merge two tasks.
- #mergeable=(mergeable : Bool)
- #mergeable? : Bool
- #mutex : String | Nil
-
#mutex=(name : String | Nil)
Setting a mutex also registers it: Task#run locks mutexes through the manager, and an unregistered one would fail at run time (long after the declaration that named it)
- #no_save=(no_save : Bool)
- #no_save? : Bool
- #outputs : Array(String)
- #outputs=(outputs : Array(String))
- #outputs_changed=(outputs_changed : Bool)
- #outputs_changed? : Bool
- #procs : Array(TaskProc)
- #procs=(procs : Array(TaskProc))
-
#ready?(run_all = false)
A task is ready if it is stale and not waiting for anything
-
#run
Executes the proc for the task
-
#stale : Bool | Nil
Tri-state staleness property: nil=unknown, true=stale, false=fresh.
- #stale=(value : Bool | Nil)
- #stale? : Bool
- #subtask_ids : Set(String)
- #subtask_ids=(subtask_ids : Set(String))
- #to_s(io)
-
#waiting? : Bool
Early-exit version of waiting_for.empty? used by ready?, so readiness checks stop at the first blocked input instead of building the whole array.
-
#waiting_for
All inputs that are not satisfied yet.
Constructor Detail
Create a task with zero or one outputs. Overload for convenience.
Instance Method Detail
The task's inputs: files, task ids or kv:// keys it depends on.
Treat as read-only while tasks are running: mutating it from task
procs on parallel workers races and, even done safely, cannot
affect the current run (wave planning happens before workers
start). Use TaskManager.add_input, which is guarded and
invalidates the caches a later run needs.
The task's inputs: files, task ids or kv:// keys it depends on.
Treat as read-only while tasks are running: mutating it from task
procs on parallel workers races and, even done safely, cannot
affect the current run (wave planning happens before workers
start). Use TaskManager.add_input, which is guarded and
invalidates the caches a later run needs.
Mark that a dependency (input) is known to be unchanged. Recomputes staleness considering ALL inputs together (thread-safe).
Merge two tasks.
inputs and outputs are joined procs of the second task are added to the 1st
Setting a mutex also registers it: Task#run locks mutexes through the manager, and an unregistered one would fail at run time (long after the declaration that named it)
Early-exit version of waiting_for.empty? used by ready?, so readiness checks stop at the first blocked input instead of building the whole array.