Skip to main content

Threading and multiprocessing eye-candy.

Project description

Threading and multiprocessing eye-candy.

Description

Pebble provides a neat API to manage threads and processes within an application.

Examples

Launch a task in a thread and wait for its results:

from pebble.decorators import Asynchronous


@Asynchronous
def do_job(foo, bar=0):
    return foo + bar


if __name__ == "__main__":
    task = do_job(1, bar=2)
    print task.get()  # it will block until do_job has completed

Launch five tasks in separate processes and handle their results in a callback:

from pebble.decorators import Concurrent


def task_done(task_id, results):
    print "Task %s has returned %d" % (task_id, results)


@Concurrent(callback=task_done)
def do_job(foo, bar=0):
    return foo + bar


if __name__ == "__main__":
    for i in range(0, 5):
        do_job(i)

    raw_input("Press any key to exit.")

Callbacks can be dynamically (re)assigned, useful to set instance methods as callback:

from pebble.decorators import Concurrent


class Foo(object):
    def __init__(self):
        self.counter = 0
        self.errors = 0
        self.do_job.callback = self.task_done
        self.do_wrong_job.error_callback = self.task_error

    def task_done(self, task_id, results):
        self.counter += results

    def task_error(self, task_id, exception):
        self.errors += 1

    @Concurrent
    def do_job():
        return 1

    @Concurrent
    def do_wrong_job():
        raise Exception("Ops!")


if __name__ == "__main__":
    foo = Foo()
    tasks = []

    for i in range(0, 5):
        task = foo.do_job()
        tasks.append(task)
        task = foo.do_wrong_job()
        tasks.append(task)

    for task in tasks:
        print "Waiting for %s" % task.id
        try:
            task.get()  # wait fo task to finish
        except Exception:
            pass  # exception are re-raised by the get() method

    print foo.counter
    print foo.errors

TODO

A roadmap:

* Python3
* add task.number
* return traceback in error callbacks
* add block and timeout to get() method
* add timeout to Concurrent decorator
* implement pebbles (pools of workers) and make it possible to bind decorators to them
* memoization as decorator parameter

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

Pebble-0.1.1.tar.gz (4.5 kB view details)

Uploaded Source

File details

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

File metadata

  • Download URL: Pebble-0.1.1.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for Pebble-0.1.1.tar.gz
Algorithm Hash digest
SHA256 fc6a2f27c60cdc0562e351ff000fccf2c9f12e7f7bdaa058ef6e17e9178065ec
MD5 8f517b01aff000f3f1f11273483510bd
BLAKE2b-256 02203ae8b15f80105ebc45052ffb8e7a0c5eec6e1a6a20aa3818df70d690607b

See more details on using hashes here.

Supported by

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