Saya sedang menulis aplikasi Python + GObject yang perlu membaca sejumlah data non-sepele dari disk saat mulai. Data dibaca secara serempak dan dibutuhkan sekitar 10 detik untuk menyelesaikan operasi baca, selama itu waktu pemuatan UI tertunda.
Saya ingin menjalankan tugas secara tidak sinkron, dan mendapatkan notifikasi ketika sudah siap, tanpa memblokir UI, kurang lebih seperti:
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()
Saya telah menggunakan GTask di masa lalu untuk hal semacam ini, tetapi saya khawatir bahwa kodenya belum tersentuh dalam 3 tahun, apalagi telah diporting ke GObject Introspection. Yang terpenting, ini tidak lagi tersedia di Ubuntu 12.04. Jadi saya mencari cara mudah untuk menjalankan tugas secara tidak sinkron, baik dengan cara Python standar atau dengan cara standar GObject / GTK +.
Sunting: ini beberapa kode dengan contoh apa yang saya coba lakukan. Saya sudah mencoba python-defer
seperti yang disarankan dalam komentar, tetapi saya tidak bisa mengelola untuk menjalankan tugas panjang secara tidak sinkron dan membiarkan UI memuat tanpa harus menunggu sampai selesai. Telusuri kode uji .
Apakah ada cara yang mudah dan banyak digunakan untuk menjalankan tugas yang tidak sinkron dan mendapatkan pemberitahuan setelah selesai?
async_call
fungsi Anda mungkin yang saya butuhkan. Maukah Anda mengembangkannya sedikit dan menambahkan jawaban, sehingga saya dapat menerimanya dan menghargai Anda setelah saya mengujinya? Terima kasih!