我正在编写一个 Python + GObject 应用程序,它需要在启动时从磁盘读取大量数据。数据是同步读取的,大约需要10秒才能完成读取操作,在此期间UI的加载会有延迟。
我想异步运行任务,并在它准备好时收到通知,而不会阻塞 UI,或多或少像:
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()
Run Code Online (Sandbox Code Playgroud)
我过去曾将GTask用于此类事情,但我担心它的代码已经 3 年没有被触及,更不用说移植到 GObject Introspection 了。最重要的是,它在 Ubuntu 12.04 中不再可用。所以我正在寻找一种简单的方法来异步运行任务,无论是标准 Python 方式还是 GObject/GTK+ 标准方式。
编辑:这是一些代码,其中包含我正在尝试执行的操作的示例。我已经python-defer按照评论中的建议进行了尝试,但是我无法异步运行长任务并让 UI 加载而不必等待它完成。浏览测试代码。
是否有一种简单且广泛使用的方式来运行异步任务并在它们完成时得到通知?
我想知道是否有一个 API 可用于在我的网页上使用来自 Ubuntu 软件中心的内容。我知道Ubuntu 应用程序目录网站包含一个几乎完整的 Ubuntu 应用程序数据库。有所有类别,它包含评级、图像、描述以及下载按钮。那么,是否可以在其他地方使用此页面上可用的某些内容?