Skip to main content

Racer

Racer is a simple Python task runner framework that supports sequential and parallel task execution. It also allows the result of one task to be passed to the next, making it flexible for various workflows.

Features

  • Task Execution: Run tasks sequentially or in parallel.
  • Task Result Propagation: Optionally pass the result of a task to the next task in the queue.
  • Multithreading Support: Execute tasks in parallel using multiple threads.
  • Customizable Tasks: Easily define custom tasks by extending the BaseTask class.

Getting Started

Basic Usage

Define your tasks using either the Task or ParallelTask class, then use the Racer class to run them sequentially.

from racer import Task, ParallelTask, Racer

def add(x: int, y: int):
    return x + y

def mul(x: int, y: int):
    return x * y

task1 = Task(name="task1", target=add, kwargs={"x": 1, "y": 5})
task2 = Task(name="task2", target=mul, args=(3, 4))

racer = Racer([task1, task2])
result = racer.run(1)
print(result)

Output:

{0: {'task1': 6, 'task2': 12}}

Running Parallel Task

To run a task in parallel, use the ParallelTask class. You can specify the number of workers (threads) to run the task concurrently.

from racer import ParallelTask

def mul(x: int, y: int):
    return x * y

parallel_task = ParallelTask(name="task3", target=mul, num_workers=3, args=(5, 6))

racer = Racer([parallel_task])
result = racer.run(1)
print(result)

Output:

{0: {'task3': [30, 30, 30]}}

Passing the Previous Task’s Result to the Next Task

To pass the result of one task to the next, set the use_prev_result flag to True when defining the task. The framework will automatically pass the previous task’s result as an argument to the next task.

def sub(x: int, y: int, prev_result=None):
    return prev_result - x - y

task1 = Task(name="task1", target=add, kwargs={"x": 1, "y": 5})
task2 = Task(name="task2", target=sub, args=(3, 4), use_prev_result=True)

racer = Racer([task1, task2])
result = racer.run(1)
print(result)

In this example, the result of task1 is passed as an additional argument to task2.

Output:

{0: {'task1': 6, 'task2': -1}}

Running with Clones

You can run the same set of tasks multiple times by passing the number of clones to the run method.

racer = Racer([task1, task2])
result = racer.run(3)
print(result)

Output:

{0: {'task1': 6, 'task2': -1}, 1: {'task1': 6, 'task2': -1}, 2: {'task1': 6, 'task2': -1}}

More Examples

from racer import ParallelTask, Racer, Task


def add(x: int, y: int):
    return x + y


def sub(x: int, y: int, z: int):
    return x - y - z


def mul(x: int, y: int, z: int):
    return x * y * z


if __name__ == "__main__":
    task1 = Task(name="task1", target=add, kwargs={"x": 1, "y": 5})
    task2 = Task(name="task2", target=sub, args=(3, 4), use_prev_result=True)
    task3 = ParallelTask(
        name="task3", target=mul, num_workers=3, args=(5, 6), use_prev_result=True
    )

    # tasks will be run sequentially
    racer = Racer([task1, task2, task3])
    results = racer.run(1)
    print(results)

Output:

{0: {'task1': 6, 'task2': -7, 'task3': [30, 30, 30]}}

Metadata

Release files for task-racer 0.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for task-racer 0.0.5
File Size Uploaded Provenance Actions
task-racer-0.0.5.tar.gz 4.0 kB Without provenance Details for task-racer-0.0.5.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for task-racer 0.0.5
File Interpreter ABI Platform Actions
task_racer-0.0.5-py3-none-any.whl Python 3 none any Details for task_racer-0.0.5-py3-none-any.whl

Total release size: 8.3 kB

Release files / task-racer-0.0.5.tar.gz

Download URL task-racer-0.0.5.tar.gz
Size 4.0 kB
Tags Source
SHA-256 checksum
How to use checksums
3bda95a382f331919287fda5b59ee353c81b1b9612295862303e6f1c958cc4ee
BLAKE2b-256 checksum
How to use checksums
5113f27aa83d9f2cd9e2eeb65c83de27f2c100556b2fa3677b1207cedcc2a7e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.10.15

Release files / task_racer-0.0.5-py3-none-any.whl

Download URL task_racer-0.0.5-py3-none-any.whl
Size 4.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6485573c614d02d2dc45c7808094f1b45e5bb4084bd437da867f85d2e72ec4d7
BLAKE2b-256 checksum
How to use checksums
8f07d1a02613de47fc226e0247d1fcd3fb78f29f777680ba3000b2e5705f6fd4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.10.15

Security for task-racer 0.0.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page