Ich schreibe eine Python + GObject-App, die beim Start eine nicht unbedeutende Datenmenge von der Festplatte lesen muss. Die Daten werden synchron gelesen und es dauert ungefähr 10 Sekunden, bis der Lesevorgang abgeschlossen ist. Während dieser Zeit verzögert sich das Laden der Benutzeroberfläche.
Ich möchte die Aufgabe asynchron ausführen und eine Benachrichtigung erhalten, wenn sie fertig ist, ohne die Benutzeroberfläche zu blockieren.
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()
In der Vergangenheit habe ich GTask für diese Art von Dingen verwendet, aber ich bin besorgt, dass der Code seit drei Jahren nicht mehr geändert wurde , geschweige denn nach GObject Introspection portiert wurde. Vor allem ist es in Ubuntu 12.04 nicht mehr verfügbar. Daher suche ich nach einer einfachen Möglichkeit, Aufgaben asynchron auszuführen, entweder auf Standard-Python-Weise oder auf GObject / GTK + -Standard-Weise.
Bearbeiten: Hier ist ein Code mit einem Beispiel, was ich versuche zu tun. Ich habe versucht, python-defer
wie in den Kommentaren vorgeschlagen, aber ich konnte es nicht schaffen, die lange Aufgabe asynchron auszuführen und die Benutzeroberfläche laden zu lassen, ohne auf den Abschluss warten zu müssen. Durchsuchen Sie den Testcode .
Gibt es eine einfache und weit verbreitete Möglichkeit, asynchrone Aufgaben auszuführen und benachrichtigt zu werden, wenn sie abgeschlossen sind?
async_call
Funktion könnte das sein, was ich brauche. Würde es Ihnen etwas ausmachen, es etwas zu erweitern und eine Antwort hinzuzufügen, damit ich es akzeptieren und Ihnen gutschreiben kann, nachdem ich es getestet habe? Vielen Dank!