Django rq-scheduler: jobs in scheduler doesnt get executed

1.5k Views Asked by At

In my Heroku application I succesfully implemented background tasks. For this purpose I created a Queue object at the top of my views.py file and called queue.enqueue() in the appropriate view.

Now I'm trying to set a repeated job with rq-scheduler's scheduler.schedule() method. I know that it is not best way to do it but I call this method again at the top of my views.py file. Whatever I do, I couldn't get it to work, even if it's a simple HelloWorld function.

views.py:

from redis import Redis
from rq import Queue
from worker import conn
from rq_scheduler import Scheduler

scheduler = Scheduler(queue=q, connection=conn)
print("SCHEDULER = ", scheduler)

def say_hello():
    print(" Hello world!")

scheduler.schedule(
scheduled_time=datetime.utcnow(),   # Time for first execution, in UTC timezone
    func=say_hello,                     # Function to be queued
    interval=60,                        # Time before the function is called again, in seconds
    repeat=10,                          # Repeat this number of times (None means repeat forever)
    queue_name='default',
)

worker.py:

import os
import redis
from rq import Worker, Queue, Connection

import django
django.setup()

listen = ['high', 'default', 'low']

redis_url = os.getenv('REDISTOGO_URL')
if not redis_url:
    print("Set up Redis To Go first. Probably can't get env variable REDISTOGO_URL")
    raise RuntimeError("Set up Redis To Go first. Probably can't get env variable REDISTOGO_URL")

conn = redis.from_url(redis_url)

if __name__ == '__main__':
    with Connection(conn):
        print(" CREATING NEW WORKER IN worker.py")
        worker = Worker(map(Queue, listen))
        worker.work()

I'm checking the length of my queue before and after of schedule(), but it looks like length is always 0. I also can see that there are jobs when I call scheduler.get_jobs(), but those jobs doesn't get enqueued or performed I think.

I also don't want to use another cron solution for my project, as I already can do background tasks with rq, it shouldn't be that hard to implement a repeated task, or is it?

I went through documentation a couple times, now I feel so stuck, so I appretiate all the help or advices that I can get.

Using rq 1.6.1 and rq-scheduler 0.10.0 packages with Django 2.2.5 and Python 3.6.10

Edit: When I print jobs in scheduler, I see that their enqueued_at param is set to None, am I missing something really simple?

0

There are 0 best solutions below