पर एक फ़ंक्शन चलाएं मैं Django ऐप पर काम कर रहा हूं। मेरे पास एक एपीआई एंडपॉइंट है, जो अनुरोध किया गया है, उसे एक फ़ंक्शन करना होगा जिसे कुछ बार दोहराया जाना चाहिए (जब तक कि कोई निश्चित शर्त सत्य न हो)। कैसे मैं इसके साथ अभी काम कर रहा हूँ है -Django - प्रत्येक x सेकंड
def shut_down(request):
# Do some stuff
while True:
result = some_fn()
if result:
break
time.sleep(2)
return True
मुझे पता है कि यह एक भयानक दृष्टिकोण है और मैं 2 सेकंड के लिए अवरुद्ध नहीं किया जाना चाहिए कि, मैं समझ नहीं इसके चारों ओर पाने के लिए ।
यह 4 सेकंड का इंतजार करने के बाद, यह काम करता है। लेकिन मुझे ऐसा कुछ चाहिए जो लूप को पृष्ठभूमि में चल रहा है, और कुछ_fn सही होने पर रोकें। (साथ ही, यह निश्चित है कि कुछ_एफएन सही हो जाएंगे)
EDIT -
पढ़ना ओज़ 123 की प्रतिक्रिया ने मुझे एक ऐसा विचार दिया जो काम करने लगता है। यहाँ मैं क्या किया है -
def shut_down(params):
# Do some stuff
# Offload the blocking job to a new thread
t = threading.Thread(target=some_fn, args=(id,), kwargs={})
t.setDaemon(True)
t.start()
return True
def some_fn(id):
while True:
# Do the job, get result in res
# If the job is done, return. Or sleep the thread for 2 seconds before trying again.
if res:
return
else:
time.sleep(2)
यह मेरे लिए काम करता है। यह आसान है लेकिन मुझे नहीं पता कि मल्टीथ्रेडिंग Django के साथ संयोजन में कितनी कुशल है।
यदि कोई इस के नुकसान को इंगित कर सकता है, तो आलोचना की सराहना की जाती है।
आप इसके लिए अजवाइन का उपयोग कर सकते हैं। आप यहां मैनुअल पा सकते हैं: https://realpython.com/blog/python/asynchronous-tasks-with-django-and-celery/#periodic-tasks – neverwalkaloner
@neverwalkaloner मुझे बिल्कुल वही पसंद है जैसा मुझे चाहिए। इसका उपयोग करने की कोशिश करेंगे, धन्यवाद। :) – Zeokav
जैसा कि @neverwalkaloner द्वारा उल्लिखित है, आप अजवाइन का उपयोग कर सकते हैं, आप अनुसूची के साथ आवधिक कार्य सेट कर सकते हैं, दस्तावेज़ को बहुत लचीला है http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html इसे crontab मॉड्यूल के लिए एक नज़र दें। –