You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Redis/python-rq/rq-scheduler配置定时任务触发NoRedisConnectionException

解决rq-scheduler的NoRedisConnectionException问题

你遇到的问题根源在于Scheduler初始化时没有正确获取到Redis连接。虽然你传入了配置好的Queue,但rq-scheduler内部的部分逻辑需要直接访问Redis连接,仅通过queue传递可能无法满足要求。下面是具体的修复方案和代码调整建议:

核心修复:显式传递Redis连接给Scheduler

先创建一个共享的Redis连接实例,同时传递给Queue和Scheduler,确保两者使用同一个连接实例:

from datetime import timedelta
from redis import Redis
from rq import Queue
from rq_scheduler import Scheduler
from flask import Flask, jsonify

app = Flask(__name__)

# 1. 创建统一的Redis连接实例
redis_conn = Redis(host=BaseConfig.REDIS_HOST, port=BaseConfig.REDIS_PORT)

# 2. 使用该连接初始化Queue
rq = Queue(connection=redis_conn)

# 3. 同时将连接传入Scheduler(与queue参数配合)
rqs = Scheduler(queue=rq, connection=redis_conn)

def hello_world():
    print("hello world")

@app.route("/queue/test", methods=["GET", "POST"])  # 注意参数是复数methods,不是method
def test_queue():
    job = rqs.enqueue_in(timedelta(seconds=30), func=hello_world)
    return jsonify(job_id=job.id)  # job.id是属性,不是方法,无需加括号()

你代码里的两个小错误

除了连接问题,你的代码还有两个容易忽略的细节错误:

  • @app.route的参数是methods(复数形式),你写的method会导致路由无法正确响应POST请求;
  • job.id是属性而非可调用方法,原来的job.id()会触发AttributeError,需要去掉括号。

额外注意事项

启动rq-scheduler worker时,要确保命令参数和代码中的Redis配置一致,示例启动命令:

rqscheduler --host <你的REDIS_HOST> --port <你的REDIS_PORT>

如果Redis设置了密码,还需要添加--password <你的REDIS_PASSWORD>参数。

内容的提问来源于stack exchange,提问作者user1960118

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:41:04