django - django 应用程序中 redis-queue 队列的命名空间

标签 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()

我可以将队列添加到我的 View 中:

# 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')

这显然是愚蠢的,因为在 View 返回后队列和作业都丢失了。重点是将队列放在某个命名空间中,以便我稍后可以再次访问它。

但是,我想不出其他地方可以放它。如果我在 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项目的什么地方?

最佳答案

原来是 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')

关于django - django 应用程序中 redis-queue 队列的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48307403/

相关文章:

python - 正确的 Django 模型关系

node.js - AWS Lambda 和 Redis

django - 将 REDIS 与 Tastypie 结合使用

node.js - 如何停止以 --daemonize yes 启动的 redis 服务器

python - 对象不可逆Django是什么意思

python - 用 django rest 散列 token

docker - 故障转移后,哨兵无法将初始主服务器提升回主模式

jquery - 在 Flask 中创建一个不返回响应的 View 函数

Django : content_type_id in GenericForeignKey

django - TemplateDoesNotExist 错误,但模板确实存在