django app

时间:2018-01-17 18:09:26

标签: django redis

我有一个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项目中的哪个位置?

1 个答案:

答案 0 :(得分:0)

为您提供django_rq provides the queue namespacesettings.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')