Add example and README updates.

This commit is contained in:
Vincent Driessen 2011-11-14 15:15:05 +01:00
parent 05e83c5231
commit 9b51083fd2
4 changed files with 89 additions and 0 deletions

View File

@ -6,6 +6,43 @@
queue provider. queue provider.
# Putting jobs on queues
Some terminology before we get started:
* *Queues* are queues, in the computer science way. Technically, they are
Redis lists where work is `lpush`'ed on and `rpop`'ed from.
* *Jobs* are a definitions of work that can be carried out by a different
process. Technically, they are just plain old Python function calls, with
arguments and return values and the like.
* *Workers* are Python processes that pop off work from queues and start
executing them. They report back any return values or exceptions.
To put work on queues, tag a Python function call as a job, like so:
@job('default')
def slow_fib(n):
if n <= 1:
return 1
else:
return slow_fib(n-1) + slow_fib(n-2)
You can still call the function synchronously:
from fib import slow_fib
slow_fib(4)
You can find an example implementation in the `examples/` directory. To run
it, open three terminal windows and run the following commands in them:
1. `python example/run_worker.py`
1. `python example/run_worker.py`
1. `python example/run_example.py`
This starts two workers and starts crunching the fibonacci calculations in the
background, while the script shows the crunched data updates every second.
### Installation ### Installation
Simply use the following command to install the latest released version: Simply use the following command to install the latest released version:

8
examples/fib.py Normal file
View File

@ -0,0 +1,8 @@
from rq import job
@job('default')
def slow_fib(n):
if n <= 1:
return 1
else:
return slow_fib(n-1) + slow_fib(n-2)

37
examples/run_example.py Normal file
View File

@ -0,0 +1,37 @@
import os
import time
from rq import push_connection
from redis import Redis
from fib import slow_fib
push_connection(Redis())
sync = False
if sync:
print 'Synchronously:'
for x in range(22, 33):
print 'fib(%d) = %d' % (x, slow_fib(x))
print 'Done'
else:
# Kick off the tasks asynchronously
async_results = {}
for x in range(22, 33):
async_results[x] = slow_fib.delay(x)
done = False
while not done:
os.system('clear')
print 'Asynchronously: (now = %s)' % time.time()
done = True
for x in range(22, 33):
result = async_results[x].return_value
if result is None:
done = False
result = '(calculating)'
print 'fib(%d) = %s' % (x, result)
print ''
print 'To start the actual in the background, run a worker:'
print ' python examples/run_worker.py'
time.sleep(1)
print 'Done'

7
examples/run_worker.py Normal file
View File

@ -0,0 +1,7 @@
from redis import Redis
from rq import push_connection
from rq.daemon import run_daemon
push_connection(Redis())
run_daemon(['default'])