Skip to main content

A Python Thread Pool and a Scheduled Executor

Project description

[![Build Status](https://travis-ci.org/chamilad/breadpool.svg?branch=master)](https://travis-ci.org/chamilad/breadpool)
[![Coverage Status](https://coveralls.io/repos/chamilad/breadpool/badge.svg?branch=master&service=github?dd=gg)](https://coveralls.io/github/chamilad/breadpool?branch=master)
[![Documentation Status](https://readthedocs.org/projects/breadpool/badge/?version=latest)](http://breadpool.readthedocs.org/en/latest/?badge=latest)
[![PyPI version](https://badge.fury.io/py/breadpool.svg)](https://badge.fury.io/py/breadpool)

# BreadPool
##A Python Thread Pool and a Scheduled Executor

BreadPool intends to simply provide implementations for a thread pool and a scheduled executor, with
easy to use interfaces and thread safety. Yes, it is a simple code to write your own implementations
for these, however it can be a lot easier if they come in a `pip install`.

## Installing BreadPool
BreadPool can be installed from the Python Package Index.

```bash
pip install breadpool
```

## ThreadPool
The `ThreadPool` class is a simple thread pool implementation. It will initially create a set of worker threads and when assigned tasks, the worker threads will take over and execute the tasks.

### Creating a ThreadPool

```python
from breadpool.pool import ThreadPool

"""
1 - number of threads to spawn
2 - An identifying name to be assigned to the threads
3 - daemon, True if you want the threads to immediately terminate when the main thread terminates. This is set to False by default
4 - polling_timeout is the timeout for the worker threads to blockingly wait for the task queue
"""
thread_pool = ThreadPool(5, "CustomThreadPool", polling_timeout=1)

```

### Enqueuing tasks
The tasks should be implemented by extending the `AbstractRunnable` class. BreadPool provides a simple implementation of the `AbstractRunnable` class called `EasyTask` which accepts a function as the task to be executed.

```python
from breadpool.pool import ThreadPool, EasyTask

def func_test():
time.sleep(random.randint(1, 5))
et = EasyTask(func_test)
thread_pool = ThreadPool(5, "CustomThreadPool", daemon=True)
thread_pool.enqueue(et)
```

### Extending `AbstractRunnable`
Or if your task is too complex for a simple function, you can extend the `AbstractRunnable` class and write your own task implementation.

```python
from breadpool.pool import AbstractRunnable

class CustomTask(AbstractRunnable):
def execute(self):
# task steps

def __init__(self):
# task initialization

```

## ScheduledJobExecutor
This is a simple scheduled executor for tasks of type `AbstractRunnable`. It will periodically and repeatedly execute the given task with at least the given time interval.

### Usage

```python
from breadpool.pool import ThreadPool, ScheduledJobExecutor, EasyTask

thread_pool = ThreadPool(3, "CustomThreadPool", polling_timeout=20)
counter_queue = Queue()
scheduled_executor = ScheduledJobExecutor(
EasyTask(lambda(l): counter_queue.put(l), "Test %s" % time.time()),
thread_pool,
5,
"CustomScheduledExecutor")

scheduled_executor.start()
....
scheduled_executor.terminate()
```

## Python Support
BreadPool supports only Python 2.7 (for now).

## License
BreadPool is an Apache v2.0 licensed project.

## Additional Links

1. ReadTheDocs - http://breadpool.readthedocs.org/en/latest/
2. PyPI - https://pypi.python.org/pypi/breadpool

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

breadpool-0.0.4.tar.gz (12.4 kB view details)

Uploaded Source

File details

Details for the file breadpool-0.0.4.tar.gz.

File metadata

  • Download URL: breadpool-0.0.4.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for breadpool-0.0.4.tar.gz
Algorithm Hash digest
SHA256 8de1c9dac167afdc7cb55da5abdc4764e7f6415cc13c70539791ca815408c79e
MD5 bc506f312d334b4dc8925abf2f8e3413
BLAKE2b-256 bf3e8580e18eb023215af9120a10a4465e073c265993b1b910e9c2073d0a5679

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