Skip to main content

A task management system for complex distributed orchestration

Project description

Pynenc

Pynenc

A task management system for complex distributed orchestration

Package version Supported Python versions GitHub last commit GitHub contributors GitHub issues GitHub license GitHub Repo stars GitHub forks


Documentation: https://docs.pynenc.org

Source Code: https://github.com/pynenc/pynenc


Pynenc addresses the complex challenges of task management in distributed environments, offering a robust solution for developers looking to efficiently orchestrate asynchronous tasks across multiple systems. By combining intuitive configuration with advanced features like automatic task prioritization and cycle detection, Pynenc empowers developers to build scalable and reliable distributed applications with ease.

Key Features

  • Intuitive Orchestration: Simplifies the setup and management of tasks in distributed systems, focusing on usability and practicality.

  • Configurable Concurrency Management: Pynenc offers versatile concurrency control mechanisms at various levels. It includes:

    • Task-Level Concurrency: Ensures only one instance of a specific task is in a running state at any given time.
    • Argument-Level Concurrency: Limits concurrent execution based on the arguments of the task, allowing only one task with a unique set of arguments to be running or pending.
    • Key Argument-Level Concurrency: Further refines control by focusing on key arguments, ensuring uniqueness in task execution based on specified key arguments.

    This structured approach to concurrency management in Pynenc allows for precise control over task execution, ensuring efficient handling of tasks without overloading the system and adhering to specified constraints.

  • Automatic Task Prioritization: Pynenc prioritizes tasks by simply counting the number of dependencies each task has. The task with the most dependencies is selected first.

  • Automatic Task Pausing: Pynenc pauses tasks that are waiting for other tasks to complete. So those with higher priority (has more dependent task waiting for them) can run instead, instead of blocking a runner and preventing deadlocks.

  • Cycle Detection: Automatically detects cyclical dependencies among tasks and raises exceptions to prevent endless loops in task execution.

  • Modularity and Extensibility: Pynenc is built with modularity at its core, supporting various components such as orchestrators, brokers, state backends, runners, and serializers. Currently compatible with Redis and a development/test mode using an in-memory synchronous version, Pynenc is designed to be extensible. Future plans include support for additional databases, queues, and services, enabling easy customization and adaptation to different operational needs and environments.

Installation

Installing Pynenc is a simple process that can be done using pip. Just run the following command in your terminal:

pip install pynenc

This command will download and install Pynenc along with its dependencies. Once the installation is complete, you can start using Pynenc in your Python projects.

For more detailed instructions and advanced installation options, please refer to the Pynenc Documentation.

Quick Start Example

To get started with Pynenc, here's a simple example that demonstrates the creation of a distributed task for adding two numbers. Follow these steps to quickly set up a basic task and execute it.

  1. Define a Task: Create a file named tasks.py and define a simple addition task:

    from pynenc import Pynenc
    
    app = Pynenc()
    
    @app.task
    def add(x: int, y: int) -> int:
        add.logger.info(f"{add.task_id=} Adding {x} + {y}")
        return x + y
    
  2. Start Your Runner or Run Synchronously:

    Before executing the task, decide if you want to run it asynchronously with a runner or synchronously for testing or development purposes.

    • Asynchronously: Start a runner in a separate terminal or script:

      pynenc --app=tasks.app runner start
      

      Check for the basic_redis_example

    • Synchronously: For test or local demonstration, to try synchronous execution, you can set the environment variable PYNENC__DEV_MODE_FORCE_SYNC_TASKS=True to force tasks to run in the same thread.

  3. Execute the Task:

    result = add(1, 2).result
    print(result)  # This will output the result of 1 + 2
    

For a complete guide on how to set up and run pynenc, visit our samples library.

Requirements

To use Pynenc in a distributed system, the current primary requirement is:

  • Redis: As of now, Pynenc requires a Redis server to handle distributed task management. Ensure that you have Redis installed and running in your environment.

Future Updates:

  • Pynenc is being developed to support additional databases and message queues. This will expand its compatibility and usability in various distributed systems.

Contact or Support

If you need help with Pynenc or want to discuss any aspects of its usage, feel free to reach out through the following channels:

  • GitHub Issues: For bug reports, feature requests, or other technical queries, please use our GitHub Issues page. You can create a new issue or contribute to existing discussions.

  • GitHub Discussions: For more general questions, ideas exchange, or discussions about Pynenc, consider using GitHub Discussions on our repository. It's a great place to connect with other users and the development team.

Remember, your feedback and contributions are essential in helping Pynenc grow and improve!

License

Pynenc is released under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pynenc-0.0.10.tar.gz (61.5 kB view details)

Uploaded Source

Built Distribution

pynenc-0.0.10-py3-none-any.whl (82.7 kB view details)

Uploaded Python 3

File details

Details for the file pynenc-0.0.10.tar.gz.

File metadata

  • Download URL: pynenc-0.0.10.tar.gz
  • Upload date:
  • Size: 61.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.8

File hashes

Hashes for pynenc-0.0.10.tar.gz
Algorithm Hash digest
SHA256 1b4d8fecb83366ed94e44bc2e20fd19f0ff4bcd8e78b9973d0e901f6a0452a61
MD5 6a13f4392d01812f3380cbb9f9969ccb
BLAKE2b-256 cea1dd61c2eb20fdfbbecc4c9cf7d5b2cd5f7d1164e510da51c6e65ade83589c

See more details on using hashes here.

File details

Details for the file pynenc-0.0.10-py3-none-any.whl.

File metadata

  • Download URL: pynenc-0.0.10-py3-none-any.whl
  • Upload date:
  • Size: 82.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.8

File hashes

Hashes for pynenc-0.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 d1f4845fa12516bda5b57dbe3cfa6d8659847970571a2e44e7ac6d189546097e
MD5 003bfdef6544b96f05a21155decb0afd
BLAKE2b-256 593f21010bea3de3ec25ac09d1427c2421fbef5b92d9946dd6359592599567ba

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page