Skip to main content

async_gui

async_gui is a library aimed to make use of threads in GUI applications simpler. It’s inspired by PyCon talk Using futures for async GUI programming in Python 3.3 and tornado @gen.engine implementation.

Most of GUI toolkits don’t allow you to access graphical elements from non-GUI thread. Python 3.2+ has nice new feature concurrent.futures, but we can’t just wait for result from future and callbacks are not very handy.

Combination of Coroutines via Enhanced Generators (PEP-342) and futures creates a rich and easy to use asynchronous programming model which can be used for creating highly responsive GUI applications.

Example

Demo of button click handler:

@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',
            'http://www.python.org']
    # 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)

Tasks yielded from on_button_click() executed in thread pool, but GUI updates done in the GUI thread. For CPU-bound applications there is also ability to run tasks in pool of processes.

See full example in examples directory.

Features

  • Python 2.7+ (futures required), Python 3+ support

  • PyQt4/PySide, Tk, Wx, Gtk GUI toolkits support. Easy to add another

  • Can execute tasks in Thread, Process, Greenlet (gevent required)

  • Possibility to run multiple tasks at the same time

  • Straightforward exception handling

  • Full test coverage

Installation

Using pip:

$ pip install async_gui

Or download, unpack and:

$ python setup.py install

To run tests use:

$ python setup.py test

History

0.2.0 (2013-0x-xx)

  • MultiTask can return generator of ready tasks instead waiting for all done

0.1.0 (2013-04-06)

  • initial PyPI release

Release files for uncrumpled_async_gui 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for uncrumpled_async_gui 0.1.1
File Size Uploaded
uncrumpled_async_gui-0.1.1.tar.gz 21.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for uncrumpled_async_gui 0.1.1
File Interpreter ABI Platform
uncrumpled_async_gui-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 34.3 kB

Release files / uncrumpled_async_gui-0.1.1.tar.gz

Download URL uncrumpled_async_gui-0.1.1.tar.gz
Size 21.4 kB
Tags Source
SHA-256 checksum
How to use checksums
6a1fcef6adee78292b1aa5a61f26ecec8699b8ac21b851516f8e903da21edfff
BLAKE2b-256 checksum
How to use checksums
63a05eca0afcb653c40af3eb5779a3ca47c125ad5c7763dfd296663f7d21001d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / uncrumpled_async_gui-0.1.1-py3-none-any.whl

Download URL uncrumpled_async_gui-0.1.1-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
57584135d8bbc32eab3be9fd2cbd9ca4bdec60e26c45e4f9bbb2cedc96d3b299
BLAKE2b-256 checksum
How to use checksums
ff999f9783204a6ec7536cb582205fbfaec5e6870b5efa1e74ab36aa81f4418f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page