Awesome Open Source
Awesome Open Source

================================= Flask-APScheduler

Flask-APScheduler is a Flask extension which adds support for the APScheduler.

|Version| |Coverage| |CodeClimate| |Travis|


  • Loads scheduler configuration from Flask configuration.
  • Loads job definitions from Flask configuration.
  • Allows to specify the hostname which the scheduler will run on.
  • Provides a REST API to manage the scheduled jobs.
  • Provides authentication for the REST API.


You can install Flask-APScheduler via Python Package Index (PyPI_),::

pip install Flask-APScheduler



  • Create a flask application. For an example, see this tutorial <>_
  • Import and initialize Flask-APScheduler
  • Set any configuration needed

A basic example will looks like this.

.. code-block:: python

from flask import Flask
# import Flask-APScheduler
from flask_apscheduler import APScheduler

# set configuration values
class Config(object):

# create app
app = Flask(__name__)

# initialize scheduler
scheduler = APScheduler()
# if you don't wanna use a config, you can set options here:
# scheduler.api_enabled = True

if __name__ == '__main__':

Adding Jobs

Jobs can be added to the scheduler when the app starts. They are created in decorated functions, which should be imported before is called.

.. code-block:: python

# interval example
@scheduler.task('interval', id='do_job_1', seconds=30, misfire_grace_time=900)
def job1():
    print('Job 1 executed')

# cron examples
@scheduler.task('cron', id='do_job_2', minute='*')
def job2():
    print('Job 2 executed')

@scheduler.task('cron', id='do_job_3', week='*', day_of_week='sun')
def job3():
    print('Job 3 executed')

Jobs can also be added after you app is running

.. code-block:: python


If you wish to use anything from your Flask app context inside the job you can use something like this

.. code-block:: python

def blah():
        # do stuff


All scheduler events can be used to trigger logging functions. See APScheduler <>_ for a list of available events.

If you are using your Flask app context inside of a function triggered by a scheduler event can include something like this

.. code-block:: python

def blah():
        # do stuff

scheduler.add_listener(blah, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)


Flask-APScheduler comes with a build-in API. This can be enabled/disabled in your flask configuration.

.. code-block:: python

  • /scheduler [GET] > returns basic information about the webapp
  • /scheduler/jobs [POST json job data] > adds a job to the scheduler
  • /scheduler/jobs/<job_id> [GET] > returns json of job details
  • /scheduler/jobs [GET] > returns json with details of all jobs
  • /scheduler/jobs/<job_id> [DELETE] > deletes job from scheduler
  • /scheduler/jobs/<job_id> [PATCH json job data] > updates an already existing job
  • /scheduler/jobs/<job_id>/pause [POST] > pauses a job, returns json of job details
  • /scheduler/jobs/<job_id>/resume [POST] > resumes a job, returns json of job details
  • /scheduler/jobs/<job_id>/run [POST] > runs a job now, returns json of job details


Other commands can be passed to the scheduler and are rather self explainatory:

  • scheduler.start()
  • scheduler.shutdown()
  • scheduler.pause() > stops any job from starting. Already running jobs not affected.
  • scheduler.resume() > allows scheduled jobs to begin running.
  • scheduler.add_listener(,)
  • scheduler.remove_listener()
  • scheduler.add_job(,, **kwargs)
  • scheduler.remove_job(, **)
  • scheduler.remove_all_jobs(**)
  • scheduler.get_job(**)
  • scheduler.modify_job(,**, **kwargs)
  • scheduler.pause_job(, **)
  • scheduler.resume_job(, **)
  • scheduler.run_job(, **)
  • scheduler.authenticate()


Configuration options specific to Flask-APScheduler:

.. code-block:: python


Other configuration options are included from APScheduler <>_


When running Flask-APScheduler on a wsgi process only 1 worker should be enabled. APScheduler 3.0 will only work with a single worker process. Jobstores cannot be shared among multiple schedulers.

See APScheduler's <>_ documentation for further help.

Take a look at the examples_ to see how it works.

Also take a look at <>_ for help.


Please use the Issues_ for feature requests and troubleshooting usage.

.. |Version| image:: :target:

.. |Coverage| image:: :target:

.. |Travis| image:: :target:

.. |CodeClimate| image:: :target:

.. _examples:

.. _PyPi:

.. _Issues:

.. _CommonIssues:

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
python (50,849
flask (496
scheduler (124
cron-jobs (17
flask-extensions (17

Find Open Source By Browsing 7,000 Topics Across 59 Categories