为GUI应用程序提供简单的多线程和多进程
项目描述
async_gui
async_gui 是一个库,旨在使在GUI应用程序中使用线程变得简单。它受到 PyCon 讲座 使用 futures 在 Python 3.3 中进行异步 GUI 编程 和 tornado @gen.engine 实现的启发。
大多数GUI工具包不允许您从非GUI线程访问图形元素。Python 3.2+ 有一个很好的新特性 concurrent.futures,但我们不能仅仅等待 futures 的结果,回调也不是非常方便。
通过增强生成器(PEP-342)和 futures 的组合,创建了一个丰富且易于使用的异步编程模型,可用于创建高度响应的GUI应用程序。
示例
按钮点击处理程序的演示
@engine.async
def on_button_click(self, *args):
self.status_label.setText("Downloading image...")
# Run single task in separate thread
image_data = yield Task(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',
'https://pythonlang.cn']
# Run multiple task simultaneously in thread pool
pages = yield [Task(self.load_url, url) for url in urls]
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线程中完成。对于计算密集型应用程序,还可以在进程池中运行任务。
功能
Python 2.7+(需要 futures),Python 3+ 支持
PyQt4/PySide,Tk,Wx,Gtk GUI工具包支持。易于添加另一个
可在线程、进程、Greenlet(需要gevent)中执行任务
可同时运行多个任务
异常处理简单明了
全面测试覆盖
安装
使用pip
$ pip install async_gui
或下载、解压并
$ python setup.py install
使用以下命令运行测试
$ python setup.py test
链接
文档位于readthedocs.org
源代码和问题追踪位于GitHub。
历史记录
0.2.0 (2013-0x-xx)
MultiTask可以返回已准备好的任务生成器,而不是等待所有任务完成
0.1.0 (2013-04-06)
PyPI上的初始发布
项目详情
关闭
async_gui-0.1.1.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 1584c18f4363bb48a0d8ced1a83387e5b5e7a3779ead018258938560a9317af4 |
|
MD5 | ffcdbda070243f3bf16183d9a92a65e1 |
|
BLAKE2b-256 | 656a7ed68f2a3e49c6c616482a3f5024c1f8568000a19bc9c656b5a38747c2a6 |