This question already has an answer here:
I have problem when i am using apscheduler in my flask application.
In my view.py file i am writing like this
import time
from apscheduler.scheduler import Scheduler
def test_scheduler():
print "TEST"
print time.time()
sched = Scheduler()
sched.add_interval_job(test_scheduler, seconds=5)
sched.start()
And then this method test_scheduler() executes twice in every five second
TEST 1360844314.01 TEST 1360844314.2
the best solution is to use
add_cron_job('*')
instead ofadd_interval_job('*')
I've made it, I added in add_interval_job parameter to start after a certain time point
When using the reloader, there are the master and child processes. Your scheduler thread runs in both. You need to prevent the scheduler from running in the master process
In debug mode, Flask's reloader will load the flask app twice (How to stop Flask from initialising twice in Debug Mode?). I'm not sure why this is, but it causes apscheduler's jobs to be scheduled twice. A quick
print "loaded scheduler"
right beforesched.start()
confirms this.There are a couple ways around this, as mentioned in the linked answer. The one I found that worked best is just to disable the reloader like so:
It means I have to reload my app manually as I develop it, but it's a small price to pay to get apscheduler working.
You can start the scheduler in Flask's
before_first_request()
decorator, which "registers a function to be run before the first request to this instance of the application".Note that
before_first_request()
will always be called again with the first request after server reload.