Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
flask with "cron"-like loop
from flask import Flask, render_template, jsonify, request
from threading import Timer, Thread
from time import sleep
app = Flask(__name__)
@app.route("/api/<method>")
def api(method):
data = {
'foo': 'bar',
'method': method
}
response = jsonify(data)
response.status_code = 200
return response
class Scheduler(object):
def __init__(self, sleep_time, function):
self.sleep_time = sleep_time
self.function = function
self._t = None
def start(self):
if self._t is None:
self._t = Timer(self.sleep_time, self._run)
self._t.start()
else:
raise Exception("this timer is already running")
def _run(self):
self.function()
self._t = Timer(self.sleep_time, self._run)
self._t.start()
def stop(self):
if self._t is not None:
self._t.cancel()
self._t = None
def query_db():
print "IM QUERYING A DB"
if __name__ == "__main__":
scheduler = Scheduler(5, query_db)
scheduler.start()
app.run(host='0.0.0.0', port=1337)
scheduler.stop()
@CWang24

This comment has been minimized.

Copy link

@CWang24 CWang24 commented Sep 15, 2015

I tried your code, it works, but why is the query_db() called twice in every 5 seconds?

@RafaAguilar

This comment has been minimized.

Copy link

@RafaAguilar RafaAguilar commented Nov 18, 2015

Hi @chadselph, thanks for your code, it works like @CWang24 said, but really, it call the function twice.

edit:

The code is just fine, the code is flawless, what is called twice is the main function if you don't turn off the reloader. More

@naimo

This comment has been minimized.

Copy link

@naimo naimo commented Dec 16, 2015

Thanks

@shenpei1989

This comment has been minimized.

Copy link

@shenpei1989 shenpei1989 commented Mar 28, 2017

call the function twice, it's because 'debug=True', you can use 'app.run(host='0.0.0.0', debug=False, port=1337)' or 'app.run(host='0.0.0.0', debug=True, port=1337, use_reloader=False)' to solve this problem.

@sunjos

This comment has been minimized.

Copy link

@sunjos sunjos commented Mar 9, 2018

Good,THKS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment