mirror of https://github.com/rq/rq.git
Add example and README updates.
This commit is contained in:
parent
05e83c5231
commit
9b51083fd2
37
README.md
37
README.md
|
@ -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:
|
||||||
|
|
|
@ -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)
|
|
@ -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'
|
|
@ -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'])
|
Loading…
Reference in New Issue