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应该考虑使用DTO来代替Spring控制器层吗?   java为什么要将Maven与Git结合起来?   java试图将CSV转换为XLSX,但使用了错误的逗号拆分列   mysql Spring 3+Hibernate:java。sql。BatchUpdateException:无法添加或更新子行(ManyToMany)   java基本字符串反转器   java无法使用RestControllerAdvice为身份验证失败生成自定义错误消息   java当只允许SQLException时,如何抛出EOFEException?   java如何创建播放模块?   Android中匿名类的java实例化异常问题   java两个停靠组件,其中第二个组件填充剩余空间   java如何在按钮延迟时启用它   Java中正在运行的应用程序中的后台进程   java我正试图从一个字符串打印出这个字符输出   如何使用java socket通过两个不同的wifi连接两台电脑?   javaapachecamel:如何将分层数据从数据库转换为pojo   java Webrtc:OniconConnectionChange和onConnectionChange之间有什么区别   java如何重写已经创建的JTable方法   爪哇扫雷机堆垛机   雅加达ee Java ee EJB 3.0 Glassfish