0

在此处输入图像描述

我正在尝试扩展仅带有用户模型的烧瓶基础项目https://github.com/hack4impact/flask-base/tree/master/app 。我正在尝试添加使用 rq 在 redis 上运行后台任务的能力。我发现https://devcenter.heroku.com/articles/python-rq这很有帮助。

这个应用程序支持 redis 队列,后台 redis 队列通过运行实现:

@manager.command
def run_worker():
    """Initializes a slim rq task queue."""
    listen = ['default']
    conn = Redis(
        host=app.config['RQ_DEFAULT_HOST'],
        port=app.config['RQ_DEFAULT_PORT'],
        db=0,
        password=app.config['RQ_DEFAULT_PASSWORD'])

    with Connection(conn):
        worker = Worker(map(Queue, listen))
        worker.work()

使用:

$ python manage.py run_worker

在我看来,我有:

@main.route('/selected')
def background_selected():
    from rq import Queue
    from manage import run_worker.conn
    q = Queue(connection=conn)
    return q.enqueue(selected)

问题是我不知道如何将在 run_worker() 中创建的连接导入到我的视图中。我尝试了以下变化:

from manage import run_worker.conn

但我得到:

SyntaxError:无效的语法。

如何在后台任务中访问 c​​onn 变量?

4

2 回答 2

1

来自文档,python-rq 配置

您可以尝试进行以下更改:

管理器.py

import redis

"""Initializes a slim rq task queue."""
listen = ['default']
conn = redis.Redis(host=app.config['RQ_DEFAULT_HOST'], 
                   port=app.config['RQ_DEFAULT_PORT'],
                   db=0,     
                   password=app.config['RQ_DEFAULT_PASSWORD'])

@manager.command
def run_worker():
    with Connection(conn):
        worker = Worker(map(Queue, listen))
        worker.work()

并从视图:

from rq import Queue
from manage import conn

q = Queue(connection=conn)
于 2018-02-12T19:11:51.737 回答
1

我联系了提供以下内容的开发人员:

在此处输入图像描述

于 2018-03-03T20:08:27.800 回答