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 exampleexamples目录中。

功能

  • python 2.7+(需要futures), python 3+支持
  • pyqt4/pyside、tk、wx、gtk gui工具包支持。易于添加另一个
  • 可以在thread、process、greenlet中执行任务(需要gevent
  • 同时运行多个任务的可能性
  • 简单的异常处理
  • 全面测试覆盖率

安装

使用pip

$ pip install async_gui

或者下载、解包并:

$ python setup.py install

要运行测试,请使用:

$ python setup.py test

历史记录

0.2.0(2013-0X-XX)

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

0.1.0(2013-04-06)

  • 初始PYPI版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java:删除并重新创建对象   HttpObjectAggregator上的java Netty 4泄漏异常   即使测试失败,java Gradle也会在测试阶段后执行任务   java更新JComboBox后,如何刷新框的长度   java当我单击按钮时,我的应用程序意外停止   java SpringBoot 2.2.1 groovyMarkupConfigurer异常   java spring webflux:如何从同步调用发布事件以进行异步处理?   java Viewpager“ViewGroup”更改背景色运行时   JavaJTree:检查选择的级别   java我想在所有网站href链接上添加前缀   java如何生成无分支代码?   用Java在DrawingCanvas上创建线条   使用jpos api的java打包子字段   Java映射到对象而不是另一个对象的现有方法可选<>吗?   java添加更改图形颜色的按钮