/ / धागा बंद करो जब तक अजवाइन कार्य समाप्त नहीं हो जाता है - अजगर, डीजेंगो, अजवाइन

अजवाइन कार्य खत्म होने तक धागे को रोकें - पायथन, डीजेंगो, अजवाइन

मेरे पास एक django webserver है, और एक फ़ॉर्म जिसमेंउपयोगकर्ता जानकारी दर्ज करता है। जब भी मैं अपने डेटाबेस में मॉडल को अपडेट करता हूं, और एक निश्चित बिंदु पर जब कोई सूचना मान्य होती है, तो मैं प्रपत्र को बदल देता हूं, तो उपयोगकर्ता द्वारा अगला क्लिक करने से पहले ही मैं अपना परिणाम प्राप्त करने के लिए अजवाइन में एक लंबे समय तक चलने वाला कार्य बनाऊंगा।

मैं RabbitMQ के साथ दलाल के रूप में Django अजवाइन का उपयोग कर रहा हूं,और मेरा सवाल यह है कि IN CASE में सबसे उपयुक्त तरीका क्या है, कार्य अभी भी समाप्त नहीं हुआ है, जब तक कि कार्य राज्य नहीं है तब तक django में प्रतिक्रिया थ्रेड को लॉक करें। AsyncResult.get उस के लिए विधि, लेकिन यह सिर्फ एक लंबे समय के लिए धागे को लॉक करता है और फिर मुझे परिणाम देता है। IE यह तुरंत नहीं है, किसी को भी यह कैसे हल करने के लिए एक विचार है?

उत्तर:

जवाब के लिए 2 № 1

परिणाम आने तक आप बस इंतजार कर सकते हैं ready().

from time import sleep
result = some_task.apply_async(args=myargs)
while not result.ready():
sleep(0.5)
result_output = result.get()

ऐसा प्रतीत होता है कि वहाँ भी है wait(), तो आप बस इस्तेमाल कर सकते हैं। निम्नलिखित को मूल रूप से उपरोक्त कोड के समान काम करना चाहिए।

result = some_task.apply_async(args=myargs)
result_output = result.wait(timeout=None, interval=0.5)

उत्तर № 2 के लिए 1

पूरा करने का एक तरीका यह होगा कि रिडिस में प्रतीक्षा करने वाले परिणाम हों, और ए का उपयोग करके उन्हें प्राप्त करें अवरुद्ध पॉप सत्र आईडी जैसे कुछ अनूठे मूल्य का उपयोग करके ऑपरेशन, इसकी टाइमआउट क्षमता पर ध्यान दें।