跳转到主要内容

为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

历史记录

0.2.0 (2013-0x-xx)

  • MultiTask可以返回已准备好的任务生成器,而不是等待所有任务完成

0.1.0 (2013-04-06)

  • PyPI上的初始发布

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

async_gui-0.1.1.tar.gz (22.0 kB 查看散列)

上传时间 源代码

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面