This is a simple demo app that uses raw timed set queues.
First, get into a Python virtualenv (make virtualenv) or into the docker image at the root of this directory (make ssh)
Then install MRQ and the packages needed for this example:
$ cd examples/timed_set
Launch MongoDB & Redis if they are not already started:
$ mongod &
$ redis-server &
Enqueue raw jobs with python script:
$ python enqueue_raw_jobs.py example_timed_set 4 10
You can check redis entries:
$ redis-cli
$ ZRANGE mrq:q:example_timed_set 0 -1 WITHSCORES
You should see the following lines : (except timestamp of course)
1) "task_0"
2) "1520457493.2588561"
3) "task_1"
4) "1520457503.2588561"
5) "task_2"
6) "1520457513.2588561"
7) "task_3"
8) "1520457523.2588561"
You should also launch a dashboard to monitor the progress:
$ mrq-dashboard
Then spawn a worker listenig to your timed_set queue example_timed_set:
$ mrq-worker example_timed_set --config=/app/examples/timed_set/config.py
This is obviously a very simple example, production systems will be much more complex but it gives you an overview of timed set queues and a good starting point.
[DEBUG] Starting example.Print({'test': 'task_0'})
Hello World
Given params test is task_0
Bye
[DEBUG] Starting example.Print({'test': 'task_1'})
Hello World
Time of last tasks execution 10.04 seconds
Given params test is task_1
Bye
[DEBUG] Starting example.Print({'test': 'task_2'})
Hello World
Time of last tasks execution 10.03 seconds
Given params test is task_2
Bye
[DEBUG] Starting example.Print({'test': 'task_3'})
Hello World
Time of last tasks execution 10.03 seconds
Given params test is task_3
Bye
Note that the duration beetween enqueued tasks execution depends on when you start your worker. For example if you enqueue tasks every 10 seconds from now and you're waiting 20 seconds before spawning you worker, first 2 tasks we'll be executed directly as the expected execution time is in the past. Here is the expected output of that case :
[DEBUG] Starting example.Print({'test': 'task_0'})
Hello World
Given params test is task_0
Bye
[DEBUG] Starting example.Print({'test': 'task_1'})
Hello World
Last task was executed 3.13 seconds ago
Given params test is task_1
Bye
[DEBUG] Starting example.Print({'test': 'task_2'})
Hello World
Last task was executed 10.03 seconds ago
Given params test is task_2
Bye
[DEBUG] Starting example.Print({'test': 'task_3'})
Hello World
Last task was executed 10.03 seconds ago
Given params test is task_3
Bye