django rq调度程序:调度程序中的作业不会被执行

k2arahey  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(301)

在我的heroku应用程序中,我成功地实现了后台任务。为此,我在views.py文件的顶部创建了一个queue对象,并在相应的视图中调用queue.enqueue()。
现在我尝试用rq scheduler的scheduler.schedule()方法设置一个重复的作业。我知道这不是最好的方法,但是我在views.py文件的顶部再次调用了这个方法。不管我做什么,我都不能让它工作,即使它是一个简单的helloworld函数。
视图.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',
)

工人.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()

我正在检查schedule()之前和之后的队列长度,但看起来长度始终为0。当我调用scheduler.get\u jobs()时,我还可以看到有一些作业,但我认为这些作业不会排队或执行。
我也不想在我的项目中使用另一个cron解决方案,因为我已经可以用rq做后台任务了,实现一个重复的任务应该没那么难吧?
我看了几次文档,现在我觉得很卡住,所以我感谢所有的帮助或建议,我可以得到。
在django 2.2.5和python 3.6.10中使用rq1.6.1和rqscheduler 0.10.0包
编辑:当我在scheduler中打印作业时,我看到它们的enqueued参数被设置为none,我是否遗漏了一些非常简单的东西?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题