cherrypy server for Flask + task scheduler and monitor
Project description
Cherrypy prod server for Flask + parallel task scheduler
Installation
pip install flask_production
Usage example
CherryFlask
Cherrypy server on top of Flask app
CherryFlask(app, scheduler=None, silent=False)
Parameters:
app (Flask): Flask application
scheduler (TaskScheduler): task scheduler to run in parallel with Flask app
- silent (bool): don’t print logs
default False
from flask import Flask
from flask_production import CherryFlask
app = Flask(__name__)
...
cherry = CherryFlask(app)
cherry.run(host="0.0.0.0", port=8080, threads=5, debug=False)
TaskScheduler
TaskScheduler(check_interval=5,
holidays_calendar=None,
tzname=None,
on_job_error=None,
log_filepath=None,
log_maxsize=5*1024*1024, # 5 MB
log_backups=1,
startup_grace_mins=0, # minutes
persist_states=True)
Parameters:
- check_interval (int): how often to check for pending jobs
default 5 seconds
- holidays_calendar (holidays.HolidayBase): calendar to use for intervals like businessday
default US holidays
tzname (str): name of timezone as supported by dateutil.tz
on_job_error (func(e)): function to call if any job fails
log_filepath (path): file to write logs to
- log_maxsize (int): byte limit per log file
default 5 mb (only effective if log_filepath is provided)
- log_backups (int): number of backups of logs to retain
default 1 (only effective if log_filepath is provided)
- startup_grace_mins (int): grace period for tasks in case a schedule was missed because of app restart
default 0
- persist_states (bool): store job logs on disk so that they can be read back on app restart
default True (logs will be stored in a unique data directory)
from flask_production import TaskScheduler
sched = TaskScheduler(check_interval=2)
# Run every minute
sched.every(60).do(foo)
# Run on end of every month (with strict_date False)
sched.every("31st").strict_date(False).at("08:00").do(foo)
# Run every weekday
sched.every("weekday").at("08:00").do(lambda:bar())
sched.every("weekday").at("08:00").timezone("Europe/London").do(lambda:bar())
# catch() will run on job error
example_job = sched.every("weekday").at("09:00").do(lambda:failing()).catch(lambda e: print(e))
# access job information and status as dict
print(example_job.to_dict())
print(sched.jobs[-1].to_dict()) # same job
sched.start() # starts the task scheduler and blocks
Instead of sched.start(), TaskScheduler can be run in parallel with a Flask application using CherryFlask
from flask import Flask
from flask_production import TaskScheduler, CherryFlask
app = Flask(__name__)
...
sched = TaskScheduler()
...
cherry = CherryFlask(app, scheduler=sched)
cherry.run(host="0.0.0.0", port=8080, threads=5, debug=False)
TaskMonitor
TaskMonitor(
app,
sched,
display_name=None,
endpoint="@taskmonitor",
homepage_refresh=30,
taskpage_refresh=5,
can_rerun=True,
can_disable=True)
Parameters:
app (int): Flask application
sched (TaskScheduler): task scheduler with task definitions
- display_name (str): name of the application to be displayed
default app.name
- endpoint (str): URL endpoint where the taskmonitor can be viewed
default “@taskmonitor”
- homepage_refresh (int): home page auto refresh interval (in seconds)
default 30
- taskpage_refresh (int): task page auto refresh interval (in seconds)
default 5
- can_rerun (bool): if True adds rerun button to job page
default True
- can_disable (bool): if True adds disable button to job page
default True
from flask import Flask
from flask_production import CherryFlask, TaskScheduler
from flask_production.plugins import TaskMonitor
app = Flask(__name__)
sched = TaskScheduler(check_interval=2)
monitor = TaskMonitor(app, sched)
print(monitor._endpoint) # /@taskmonitor
# Run every minute
sched.every(60).do(foo)
cherry = CherryFlask(app, scheduler=sched)
cherry.run(host="0.0.0.0", port=8080) # localhost:8080/@taskmonitor
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_production-2.8.7.tar.gz
.
File metadata
- Download URL: flask_production-2.8.7.tar.gz
- Upload date:
- Size: 32.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7700412e6ea664f6db4601504ce59f4c5aaa66801cb112013b9de86b7e69ceae |
|
MD5 | 71fb20bfbd2df12da08b62611d24fc5b |
|
BLAKE2b-256 | 056de6ae9660feba893452dc3d54c46c01d18fb0b7df79ea5d6d4947428c4323 |
File details
Details for the file flask_production-2.8.7-py3-none-any.whl
.
File metadata
- Download URL: flask_production-2.8.7-py3-none-any.whl
- Upload date:
- Size: 30.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2fe98b020584c91c7b52fb789573857a2116b649de02bdb333f86e475543f67d |
|
MD5 | 383035755218d444241ee043df9d91d7 |
|
BLAKE2b-256 | 34ff266b1ca1d99a6c49aad0d122cf933c53cfafc4ffc1212ce98949b3f3ed8d |