Skip to main content

Easy threading and multiprocessing for GUI applications

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uncrumpled_async_gui-0.1.1.tar.gz (21.4 kB view details)

Uploaded Source

Built Distribution

uncrumpled_async_gui-0.1.1-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file uncrumpled_async_gui-0.1.1.tar.gz.

File metadata

File hashes

Hashes for uncrumpled_async_gui-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6a1fcef6adee78292b1aa5a61f26ecec8699b8ac21b851516f8e903da21edfff
MD5 75652fd778269871a83d23d0f0c19abd
BLAKE2b-256 63a05eca0afcb653c40af3eb5779a3ca47c125ad5c7763dfd296663f7d21001d

See more details on using hashes here.

File details

Details for the file uncrumpled_async_gui-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for uncrumpled_async_gui-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 57584135d8bbc32eab3be9fd2cbd9ca4bdec60e26c45e4f9bbb2cedc96d3b299
MD5 248d03683da08a0eb949aff6ca880f33
BLAKE2b-256 ff999f9783204a6ec7536cb582205fbfaec5e6870b5efa1e74ab36aa81f4418f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page