Flask extension that provides an easy-to-implement controller for multiprocessing tasking. It provides default functions such as task-queueing, health-check, status-check, manual-stop and process-safe logger.
Project description
Flask-Multiprocess-Controller is an extension for Flask that provides an easy-to-implement controller for multiprocessing tasking. It provides default functions such as task-queueing, health-check, status-check, manual-stop and process-safe logger.
A common usage scenario is one has some tasks which are computational expensive and require multiple instances running concurrently. This controller provides a separate layer of controller by creating controlling thread for each instance. This can greatly improve level-of-control for computational expensive tasks.
Features
Flask-Multiprocess-Controller provides the MetaMPController() class which provides default controlling method to control the execute() method in the linked, child of MetaMPTask() class. Default controlling methods are as follows: - GET: retrieve the current status of certain task in sub-process - POST: put an execution request to the queue waiting to be executed when there is a new slot for a new sub-process - DELETE: sending the stop signal to certain task in sub-process gently
All Flask supported HTTP methods are supported(with necessary overrides)
One can also use MetaMPResource() class to adopt Flask-RESTful style APIs.
Example: Build a minimal Controller-Task structure
In the following example, we will use the built-in TemplateMPController, and TemplateMPResource to build the structure of controller-task framework. One may need to override some methods in MetaMPController for more functionality.
import logging
from flask import Flask
from flask_restful import Api
from flask_multiprocess_controller import TemplateFactory, MetaMPTask
class SampleTask(MetaMPTask):
def execute(self) -> None:
task_logger = logging.getLogger(str(os.getpid()))
counter = 0
while counter < 100:
counter += 1
task_logger.debug("doing some simple task, progress {}%.".format(counter))
time.sleep(0.5)
self.upload_status(counter)
self.checkpoint()
sample_api = Api()
sample_controller = TemplateFactory.MPController(name='Sample')(target_task=SampleTask, max_num_process=2)
sample_api.add_resource(TemplateFactory.MPResource(), '/sample', resource_class_args=(sample_controller,))
app = Flask('Sample')
sample_api.init_app(app)
app.run()
Installation
The easiest way to install it is using pip from PyPI
pip install flask-multiprocess-controller
License
See the LICENSE file for license rights and limitations (BSD-3-Clause).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file Flask-Multiprocess-Controller-0.1.1.tar.gz
.
File metadata
- Download URL: Flask-Multiprocess-Controller-0.1.1.tar.gz
- Upload date:
- Size: 10.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.8.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 79521f76e7037440fa77961ca251b58909c48b14926a2442774ee63448a2fa20 |
|
MD5 | fba39f6bf2b897bcaa5b59967eb5ef55 |
|
BLAKE2b-256 | 0941825d8b0284f93445d86bb3ab89b17349d6a162c0bf06280b37bd154c1547 |
File details
Details for the file Flask_Multiprocess_Controller-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: Flask_Multiprocess_Controller-0.1.1-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.8.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 104ae4fe745a74ba3d4e932eceb9753270a8290b6d7dd1ee3ef854b05d5cb98f |
|
MD5 | 910b272fc5c3bb9ac5ef669fed045387 |
|
BLAKE2b-256 | cf0428215ca9008766efedce137a428159f3879f347534c8b00d3fb6a2841d05 |