gui应用程序的简单线程和多处理
async_gui的Python项目详细描述
异步图形用户界面
async_gui是一个旨在简化gui应用程序中线程使用的库。 它的灵感来自于Pycon的谈话 Using futures for async GUI programming in Python 3.3 以及tornado@gen.engine实现。
大多数gui工具包不允许您从非gui线程访问图形元素。 python 3.2+有很好的新特性concurrent.futures,但我们不能只是 等待将来的结果,回调不是很方便。
Coroutines via Enhanced Generators (PEP-342)组合 并且futures创建了一个丰富且易于使用的异步编程模型 它可以用于创建高响应的gui应用程序。
示例
按钮单击处理程序演示:
@engine.asyncdefon_button_click(self,*args):self.status_label.setText("Downloading image...")# Run single task in separate threadimage_data=yieldTask(self.load_url,"http://www.google.com/images/srpr/logo4w.png")pixmap=QtGui.QPixmap.fromImage(QtGui.QImage.fromData(image_data))self.image_label.setPixmap(pixmap)self.status_label.setText("Downloading pages...")urls=['http://www.google.com','http://www.yandex.ru','http://www.python.org']# Run multiple task simultaneously in thread poolpages=yield[Task(self.load_url,url)forurlinurls]self.status_label.setText("Done")avg_size=sum(map(len,pages))/len(pages)self.result_label.setText("Average page size: %s"%avg_size)
从线程池中执行的on_button_click()生成的任务,但是 在gui线程中完成gui更新。 对于CPU绑定的应用程序,还可以在 过程。
见full example 在examples目录中。
功能
链接
- 文档位于readthedocs.org
- 源代码和问题跟踪位于GitHub。
历史记录
0.2.0(2013-0X-XX)
- 多任务可以返回准备好的任务生成器,而不是等待所有任务完成
0.1.0(2013-04-06)
- 初始PYPI版本