|
|
|
import os
|
|
|
|
import time
|
|
|
|
|
|
|
|
from fib import slow_fib
|
|
|
|
|
|
|
|
from rq import Connection, Queue
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
# Range of Fibonacci numbers to compute
|
|
|
|
fib_range = range(20, 34)
|
|
|
|
|
|
|
|
# Kick off the tasks asynchronously
|
|
|
|
async_results = {}
|
|
|
|
q = Queue()
|
|
|
|
for x in fib_range:
|
|
|
|
async_results[x] = q.enqueue(slow_fib, x)
|
|
|
|
|
|
|
|
start_time = time.time()
|
|
|
|
done = False
|
|
|
|
while not done:
|
|
|
|
os.system('clear')
|
|
|
|
print('Asynchronously: (now = %.2f)' % (time.time() - start_time,))
|
|
|
|
done = True
|
|
|
|
for x in fib_range:
|
|
|
|
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(0.2)
|
|
|
|
|
|
|
|
print('Done')
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
# Tell RQ what Redis connection to use
|
|
|
|
with Connection():
|
|
|
|
main()
|