.. _tutorials: Tutorials ========= This section of the document we have in depth examples of various use cases. Async data transfer between producer and worker ------------------------------------------------ In many real life scenarios we need to send the result back from the worker instances to the producer. The following code examples shows how to achieve that. async_producer.py ++++++++++++++++++ :: from retask.task import Task from retask.queue import Queue import time queue = Queue('example') info1 = {'user': 'Fedora planet', 'url': 'http://planet.fedoraproject.org'} task1 = Task(info1) queue.connect() job = queue.enqueue(task1) print job.result time.sleep(30) print job.result Here queue.enqueue method returns a :class:`~retask.queue.Job` object. We can access job.result to see returned result from a worker. If there is no result yet came back from the worker, it will print `None`. If you don't need any returned data from the worker you can safely ignore the job object. async_consumer.py ++++++++++++++++++ :: from retask.task import Task from retask.queue import Queue import time queue = Queue('example') queue.connect() task = queue.wait() print task.data time.sleep(15) queue.send(task, "We received your information dear %s" % task.data['user']) In the above example we see two newly introduced methods :class:`~retask.queue.Queue`. :func:`~retask.queue.Queue.wait` is a blocking call to wait for a new task in the queue. This is the preferred method over polling using :func:`~retask.queue.Queue.dequeue`. To send the result back workers will use :func:`~retask.queue.Queue.send` method, which takes an optional argument `wait_time` to specify timeout value in seconds. Synchronous / blocking wait for the result ------------------------------------------- :: from retask.task import Task from retask.queue import Queue queue = Queue('example') info1 = {'user': 'Fedora planet', 'url': 'http://planet.fedoraproject.org'} task1 = Task(info1) queue.connect() job = queue.enqueue(task1) job.wait() print job.result In this example we are using :func:`~retask.queue.Job.wait` function to do a blocking synchronous call to the worker.