J'écris une application Python + GObject qui doit lire une quantité non triviale de données du disque au démarrage. Les données sont lues de manière synchrone et il faut environ 10 secondes pour terminer l'opération de lecture, période pendant laquelle le chargement de l'interface utilisateur est retardé.
Je voudrais exécuter la tâche de manière asynchrone et recevoir une notification lorsqu'elle est prête, sans bloquer l'interface utilisateur, plus ou moins comme:
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()
J'ai utilisé GTask dans le passé pour ce genre de chose, mais je crains que son code n'ait pas été touché depuis 3 ans, et encore moins porté sur GObject Introspection. Plus important encore, il n'est plus disponible dans Ubuntu 12.04. Je recherche donc un moyen facile d'exécuter des tâches de manière asynchrone, soit de manière Python standard, soit de manière standard GObject / GTK +.
Edit: voici du code avec un exemple de ce que j'essaie de faire. J'ai essayé python-defer
comme suggéré dans les commentaires, mais je n'ai pas réussi à exécuter la tâche longue de manière asynchrone et à laisser l'interface utilisateur se charger sans avoir à attendre qu'elle se termine. Parcourez le code de test .
Existe-t-il un moyen simple et largement utilisé d'exécuter des tâches asynchrones et d'être averti lorsqu'elles sont terminées?
async_call
fonction pourrait être ce dont j'ai besoin. Pourriez-vous m'étendre un peu et ajouter une réponse, afin que je puisse l'accepter et vous créditer après l'avoir testée? Merci!