在我的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,我是否遗漏了一些非常简单的东西?
暂无答案!
目前还没有任何答案,快来回答吧!