https://github.com/iashraful/async-coro-runner
The AsyncIO Task Runner (Coro Runner) is a Python utility designed for managing concurrent asynchronous tasks using the built-in asyncio module.
https://github.com/iashraful/async-coro-runner
async asyncio asyncronous concurrency python worker
Last synced: 3 months ago
JSON representation
The AsyncIO Task Runner (Coro Runner) is a Python utility designed for managing concurrent asynchronous tasks using the built-in asyncio module.
- Host: GitHub
- URL: https://github.com/iashraful/async-coro-runner
- Owner: iashraful
- Created: 2024-10-15T11:08:56.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-06T06:55:53.000Z (about 1 year ago)
- Last Synced: 2025-07-11T04:27:55.603Z (11 months ago)
- Topics: async, asyncio, asyncronous, concurrency, python, worker
- Language: Python
- Homepage: https://ashraful.dev
- Size: 152 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# AsyncIO Task Runner (Coro Runner)
[](https://github.com/iashraful/async-coro-runner/actions/workflows/tests-runner.yml)
[](https://github.com/iashraful/async-coro-runner/actions/workflows/packaging.yml)
[](https://pypi.org/project/coro-runner/)
The **AsyncIO Task Runner** (Coro Runner) is a Python utility designed for managing concurrent asynchronous tasks using the built-in `asyncio` module. It provides an efficient way to execute multiple tasks in a single-threaded environment with customizable concurrency limits.
This project leverages `asyncio` (introduced in Python 3.4) to simplify handling of asynchronous workloads, making it ideal for lightweight, scalable applications.
## Features
- **Configurable Concurrency**: Define the number of concurrent tasks when initializing the runner.
- **Efficient Task Management**: Run multiple tasks concurrently with streamlined execution control.
- **Worker Queue**: Multiple queue can be configued along with their priority.
### Planned Enhancements
- **Monitoring Tool Integration**: Support for real-time task monitoring and analytics.
- **Low-Level API**: Features such as callbacks, acknowledgments, and error handling for advanced use cases.
- **Robust Logging**: Detailed logging to track task execution and debug issues.
## Getting Started
### Installation
To install `coro-runner`, use pip:
```bash
pip install coro-runner
```
### Full documentation
>
> [Here is the full documentation](https://github.com/iashraful/async-coro-runner/tree/main/coro_runner/docs/docs.md)
### Quickstart
- Define and schedule tasks:
```python
from coro_runner import CoroRunner
runner = CoroRunner(concurrency=25)
# Add your tasks from anywhere b
runner.add_task(your_task()) # your_task must be a coroutine or future like object
```
- Task lifecycle management: (On app start and end you must run the runner. Don't worry it'll run under same process.)
```python
async def startup():
await runner.run_until_exit()
async def shutdown():
await runner.cleanup()
```
### Prerequisites
- Python 3.12 or later
- [Poetry](https://python-poetry.org/) for dependency management
### Installation and Setup
1. Clone the repository:
```bash
git clone https://github.com/iashraful/async-coro-runner.git
cd async-coro-runner
```
2. Activate the virtual environment:
```bash
poetry shell
```
3. Install dependencies:
```bash
poetry install
```
### Running Tests
Run the test suite to verify the setup:
```bash
pytest -s
```
**Sample Output:**
```text
Task started: Task-1
Task ended: Task-1
...
```
## Example Usage
The project includes an example API implemented with FastAPI. It demonstrates how to use the task runner to manage asynchronous tasks.
### Starting the API
1. Run the API server:
```bash
uvicorn example:app --reload
```
2. Trigger tasks using the endpoint:
```bash
GET /fire-task?count=25
```
## How to Contribute
Contributions are welcome! Follow these steps to get started:
1. Fork the repository and create a new branch for your feature or bug fix.
2. Write tests for your changes.
3. Open a pull request with a clear description of your contribution.