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.
$ 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
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.
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
day_of_month, which are the same as crontab 5-parts time format. Any part that is not given defaults to
job decorator accepts
kwargs which will be passed to the decorated function as positional arguments and keywords arguments, respectively.
|Config item||Description||Default value|
|CRONTAB_EXECUTABLE||The absolute path of
|CRONTAB_LOCK_JOBS||Whether lock jobs when running||
This project is publised under MIT license.