플라스크 응용 프로그램에서 정기적으로 특정 작업을 실행해야합니다. 나는 이것을하기 위해 간단한 라이브러리 - Schedule (https://github.com/dbader/schedule)을 사용하기로 결정했다. 주 응용 프로그램 스레드에서 별도의 스레드에서 작업 스케줄러를 실행하고 있습니다. 다음은 관련 코드 스 니펫입니다.플라스크에서 일정을 실행할 때의 문제
import schedule
import time
from flask import Flask, request
from threading import Thread
app = Flask(__name__)
start_time = time.time()
def run_every_10_seconds():
print("Running periodic task!")
print "Elapsed time: " + str(time.time() - start_time)
def run_schedule():
while 1:
schedule.run_pending()
time.sleep(1)
@app.route('/', methods=['GET'])
def index():
return '<html>test</html>'
if __name__ == '__main__':
schedule.every(10).seconds.do(run_every_10_seconds)
t = Thread(target=run_schedule)
t.start()
print "Start time: " + str(start_time)
app.run(debug=True, host='0.0.0.0', port=5000)
이것을 실행하면 '정기적 인 작업 실행'을하고 싶습니다. 매 10 초마다 인쇄합니다. 그러나 이것은 내가 얻는 결과이다.
* Running on http://0.0.0.0:5000/
* Restarting with reloader
Start time: 1417002869.99
Running periodic task!
Elapsed time: 10.0128278732
Running periodic task!
Elapsed time: 10.0126948357
Running periodic task!
Elapsed time: 20.0249710083
Running periodic task!
Elapsed time: 20.0247309208
Running periodic task!
Elapsed time: 30.0371530056
Running periodic task!
Elapsed time: 30.0369319916
분명히, 어떤 이유로 작업이 한 번이 아니라 10 초마다 두 번 실행되는 것 같습니다. 그러나 단순히 태스크 스케줄러를 Flask와 함께 실행하는 대신 (단순히 app.run() 행을 주석 처리하여) 실행하면 제대로 실행됩니다.
Start time: 1417003801.52
Running periodic task!
Elapsed time: 10.0126750469
Running periodic task!
Elapsed time: 20.0246500969
Running periodic task!
Elapsed time: 30.0366458893
왜 이런 이유가있을 수 있습니까? 여러 스레드를 실행할 때 작업 대기열에 문제가 있습니까? 아직 두 가지 작업 만 예약해야하는 이유를 설명하지 못합니다.