मैं एक पायथन + GObject ऐप लिख रहा हूं जिसे शुरू में डिस्क से गैर-तुच्छ मात्रा में डेटा पढ़ने की जरूरत है। डेटा को सिंक्रोनाइज़ किया जाता है और रीड ऑपरेशन को पूरा करने में लगभग 10 सेकंड लगते हैं, इस दौरान यूआई की लोडिंग में देरी होती है।
मैं कार्य को एसिंक्रोनस रूप से चलाना चाहता हूं, और यूआई को अवरुद्ध किए बिना, इसके कम या ज्यादा होने पर एक सूचना प्राप्त करना चाहता हूं:
def take_ages():
read_a_huge_file_from_disk()
def on_finished_long_task():
print "Finished!"
run_long_task(task=take_ages, callback=on_finished_long_task)
load_the_UI_without_blocking_on_long_task()
मैंने इस तरह की चीज़ के लिए अतीत में GTask का उपयोग किया है, लेकिन मुझे चिंता है कि इसका कोड 3 वर्षों में छुआ नहीं गया है, अकेले GObject Introspection में पोर्ट किया गया है। सबसे महत्वपूर्ण बात, यह उबंटू 12.04 में उपलब्ध नहीं है। इसलिए मैं कार्यों को अतुल्यकालिक रूप से चलाने का एक आसान तरीका तलाश रहा हूं, या तो मानक पायथन तरीके से या GObject / GTK + मानक तरीके से।
संपादित करें: मैं क्या करने की कोशिश कर रहा हूं, इसके उदाहरण के साथ यहां कुछ कोड है। मैंने python-defer
टिप्पणियों में सुझाव के अनुसार प्रयास किया है, लेकिन मैं लंबे समय तक कार्य को अतुल्यकालिक रूप से चलाने का प्रबंधन नहीं कर सका और UI लोड को समाप्त होने के लिए इंतजार किए बिना रहने दिया। परीक्षा कोड ब्राउज़ करें ।
क्या अतुल्यकालिक कार्यों को चलाने का एक आसान और व्यापक रूप से उपयोग किया जाने वाला तरीका है और समाप्त होने पर उन्हें सूचित किया जाता है?
async_call
कार्य हो सकता है जो मुझे चाहिए। क्या आप इसे थोड़ा विस्तार देने और उत्तर जोड़ने का मन बनाएंगे, ताकि मैं इसे स्वीकार करूं और इसका परीक्षण करने के बाद आपको इसका श्रेय दूं? धन्यवाद!