Skip to main content

An easy to use Flask wrapper for concurrent.futures

Project description

Flask-Executor

Build Status PyPI Version GitHub license

Sometimes you need a simple task queue without the overhead of separate worker processes or powerful-but-complex libraries beyond your requirements. Flask-Executor is an easy to use wrapper for the concurrent.futures module that lets you initialise and configure executors via common Flask application patterns. It's a great way to get up and running fast with a lightweight in-process task queue.

Setup

Flask-Executor is available on PyPI and can be installed with:

pip install flask-executor

The Executor extension can either be initialized directly:

from flask import Flask
from flask_executor import Executor

app = Flask(__name__)

executor = Executor(app)

Or through the factory method:

executor = Executor()

executor.init_app(app)

Configuration

app.config['EXECUTOR_TYPE']

Specify which kind of executor to initialise. Valid values are 'thread' (default) to initialise a concurrent.futures.ThreadPoolExecutor, or 'process' to initialise a concurrent.futures.ProcessPoolExecutor.

app.config['EXECUTOR_MAX_WORKERS']

Define the number of worker threads for a ThreadPoolExecutor or the number of worker processes for a ProcessPoolExecutor. Valid values are any integer or None (default) to let the concurrent.futures module pick defaults for you.

Usage

You can submit examples to the executor just as you would expect:

from flask import Flask
from flask_executor import Executor

app = Flask(__name__)
executor = Executor(app)

def fib(n):
    if n <= 2:
        return 1
    else:
        return fib(n-1) + fib(n-2)

@app.route('/example1')
def example1():
    executor.submit(fib, 5)
    return 'OK'

Submitting examples to the executor returns standard concurrent.futures.Future objects that you can work with:

import concurrent.futures
from flask import Response

@app.route('/example2')
def example2():
    future = executor.submit(fib, 5)
    return str(future.result())

@app.route('/job3')
def job3():
    futures = [executor.submit(fib, i) for i in range(1, 40)]
    def generate():
        for future in concurrent.futures.as_completed(futures):
            yield str(future.result()) + '\n'
    return Response(generate(), mimetype='text/text')

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

Flask-Executor-0.1.5.tar.gz (2.9 kB view hashes)

Uploaded Source

Built Distribution

Flask_Executor-0.1.5-py3-none-any.whl (3.0 kB view hashes)

Uploaded Python 3

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