के साथ शेड्यूल चलाने पर समस्या मुझे अपने फ्लास्क एप्लिकेशन पर समय-समय पर एक निश्चित कार्य चलाने की आवश्यकता है। मैंने ऐसा करने के लिए एक साधारण पुस्तकालय - अनुसूची (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 सेकंड में दो बार निष्पादित होता प्रतीत होता है। हालांकि, अगर मैं केवल फ्लास्क के साथ इसे चलाने के बजाय अकेले कार्य शेड्यूलर चलाता हूं (केवल 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
इसके पीछे क्या कारण हो सकता है? क्या एकाधिक धागे चलाने के दौरान कार्यों को कतारबद्ध करने के तरीके में कोई समस्या है? यह अभी भी समझा नहीं गया है कि एक समय में दो कार्य क्यों निर्धारित किए जा रहे हैं जब केवल एक होना चाहिए।