我有一个django应用程序,它使用redis-queue在后台管理长时间运行的任务。我已经设置并运行(如果是在一个愚蠢的配置中),但我不清楚存储我的队列的适当命名空间是什么。
我按照文档中的建议设置了rq worker:
#rqsetup.py
import os
import redis
from rq import Worker, Queue, Connection
listen = ['high', 'default', 'low']
redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
conn = redis.from_url(redis_url)
if __name__ == '__main__':
with Connection(conn):
worker = Worker(map(Queue, listen))
worker.work()
我可以将队列添加到我的视图中:
# views.py
from rqsetup import conn
from rq import Queue
from somewhere import bgtask
def myview(request):
q = Queue(connection=conn)
job = q.enqueue(bgtask)
return render(request, 'somepage.html')
这显然是愚蠢的,因为在返回视图后,队列和作业将丢失。重点是将队列放在某个命名空间中,以后我可以再次访问它。
然而,我无法想象其他地方。如果我尝试进入rqsetup
,我只会遇到导入错误,或者在正确设置之前导致无序导入。我真的不太清楚它应该去哪里。
我有一个正常结构的应用程序:
myproject
-myproject
-__init__.py
-settings.py
-urls.py
-wsgi.py
-myapp
-apps.py
-somewhere.py
-views.py
-manage.py
-Procfile
-requirements.txt
-rqsetup.py
redis-queue队列应该存放在django项目中的哪个位置?
答案 0 :(得分:0)
为您提供django_rq
provides the queue namespace! settings.py
应该是这样的:
RQ_QUEUES = {
'default': {
'HOST': 'localhost',
'PORT': 6379,
'DB': 0,
'PASSWORD': 'some-password',
'DEFAULT_TIMEOUT': 360,
},
'high': {
'URL': os.getenv('REDISTOGO_URL', 'redis://localhost:6379/0'), # If you're on Heroku
'DEFAULT_TIMEOUT': 500,
},
'low': {
'HOST': 'localhost',
'PORT': 6379,
'DB': 0,
}
}
然后你只需从django_rq命名空间中获取队列:queue = django_rq.get_queue('high')
。