flask-crontab
flask-crontab copied to clipboard
Simple Flask scheduled tasks without extra daemons
flask-crontab
Simple Flask scheduled tasks without extra daemons
This project is strongly inspired by django-crontab, and only works on Python 3.5+. Due to the coming EOL of Python 2 on 2020/01/01, there is no plan for Python 2 support.
Quick Start
Install via pip:
$ pip install flask-crontab
Instantiate the extension in your app.py after the creation of Flask app:
from flask import Flask
from flask_crontab import Crontab
app = Flask(__name__)
crontab = Crontab(app)
If you are using App Factory pattern, you can also register the extension later:
crontab = Crontab()
def create_app():
...
crontab.init_app(app)
Now create a scheduled job:
@crontab.job(minute="0", hour="6")
def my_scheduled_job():
do_something()
An app context is automatically activated for every job run, so that you can access objects that are attached to app context. Then add the job to crontab:
$ flask crontab add
That's it! If you type in crontab -l in your shell, you can see some new lines created by flask-crontab.
Show jobs managed by current app:
$ flask crontab show
Purge all jobs managed by current app:
$ flask crontab remove
Run a specific job given by hash:
$ flask crontab run <job_hash>
See supported options via --help for every commands.
Decorator API
def job(
minute: str = "*",
hour: str = "*",
day: str = "*",
month: str = "*",
day_of_week: str = "*",
args: Tuple[Any, ...] = (),
kwargs: Optional[Dict[str, Any]] = None,
) -> Callable:
The decorator accepts five arguments minute, hour, day, month, day_of_month, which are the same as crontab 5-parts time format. Any part that is not given defaults to *.
Besides, job decorator accepts args and kwargs which will be passed to the decorated function as positional arguments and keywords arguments, respectively.
Configuration
| Config item | Description | Default value |
|---|---|---|
| CRONTAB_EXECUTABLE | The absolute path of crontab |
/usr/bin/crontab |
| CRONTAB_LOCK_JOBS | Whether lock jobs when running | False |
License
This project is publised under MIT license.