Başlangıçta diskten önemsiz miktarda veri okuması gereken bir Python + GObject uygulaması yazıyorum. Veriler senkronize olarak okunur ve okuma işlemini bitirmek yaklaşık 10 saniye sürer, bu süre zarfında kullanıcı arayüzünün yüklenmesi gecikir.
Görevi eşzamansız olarak çalıştırmak ve hazır olduğunda UI'yi engellemeden bir bildirim almak istiyorum:
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()
Geçmişte bu tür bir şey için GTask kullandım , ancak kodunun 3 yıl içinde GObject Introspection'a taşınmasına izin verilmediğinden endişeleniyorum. En önemlisi, artık Ubuntu 12.04'te mevcut değil. Bu yüzden, görevleri standart bir Python veya GObject / GTK + standart şekilde eşzamansız olarak çalıştırmanın kolay bir yolunu arıyorum.
Düzenleme: İşte yapmaya çalıştığım bir örnek bazı kod. python-defer
Yorumlarda önerildiği gibi denedim , ancak uzun görevi asenkron olarak çalıştırmayı başaramadım ve bitmesini beklemek zorunda kalmadan UI yüklemesine izin veremedim. Test koduna göz atın .
Zaman uyumsuz görevleri yürütmenin ve tamamlandığında bildirim almanın kolay ve yaygın olarak kullanılan bir yolu var mı?
async_call
fonksiyonunun ihtiyacım olan şey olabileceğini düşünüyorum . Biraz genişletip bir cevap ekleyebilir misiniz, böylece test ettikten sonra kabul edebilir ve size kredi verebilir miyim? Teşekkürler!