আমি একটি পাইথন + গবজেক্ট অ্যাপ লিখছি যা শুরুতে ডিস্ক থেকে অ-তুচ্ছ পরিমাণে ডেটা পড়তে হবে। ডেটা সিঙ্ক্রোনাসলি পড়া হয় এবং রিড অপারেশন শেষ করতে 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()
আমি এই ধরণের জিনিসটির জন্য অতীতে জিটিস্ককে ব্যবহার করেছি , তবে আমি উদ্বিগ্ন যে এর কোডটি 3 বছরে স্পর্শ করা হয়নি, কেবলমাত্র গবজেক্ট ইন্ট্রোস্পেকশনে পোর্ট করা উচিত। সর্বাধিক গুরুত্বপূর্ণ, এটি উবুন্টু 12.04 এ আর উপলব্ধ নেই। সুতরাং আমি কার্যকরী পাইথন উপায়ে বা একটি GObject / GTK + স্ট্যান্ডার্ড পদ্ধতিতে অ্যাসিঙ্ক্রোনালিভাবে কাজগুলি চালনার সহজ উপায়টি খুঁজছি।
সম্পাদনা করুন: আমি যা করার চেষ্টা করছি তার একটি উদাহরণ সহ এখানে কিছু কোড। আমি python-defer
মন্তব্যে প্রস্তাবিত হিসাবে চেষ্টা করেছি , তবে আমি দীর্ঘমেয়াদী কাজটি অবিচ্ছিন্নভাবে চালানোর ব্যবস্থা করতে পারি না এবং এটি শেষ হওয়ার জন্য অপেক্ষা না করেই ইউআই লোড হতে দেয়। পরীক্ষার কোডটি ব্রাউজ করুন ।
অ্যাসিক্রোনাস টাস্কগুলি চালনার কোনও সহজ এবং বহুল ব্যবহৃত উপায় এবং সেগুলি শেষ হয়ে গেলে কী বিজ্ঞপ্তি পাওয়া যায়?
async_call
ফাংশনটি আমার যা প্রয়োজন তা হতে পারে। আপনি কি এতে কিছুটা প্রসারিত করতে এবং একটি উত্তর যুক্ত করতে আপত্তি করবেন, যাতে আমি এটি গ্রহণ করতে পারি এবং এটি পরীক্ষা করার পরে আপনাকে জমা দিতে পারি? ধন্যবাদ!