首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作业仅在redis cli中可见,但不会在rq仪表板中显示,也不会执行

作业仅在redis cli中可见,但不会在rq仪表板中显示,也不会执行
EN

Stack Overflow用户
提问于 2020-12-02 16:47:11
回答 1查看 693关注 0票数 0

我想使用Redis和RQ构建一个管道。我创建了worker、服务器和作业,worker正在运行并侦听队列,服务器正在向队列调度作业,作业被调度并打印作业ID,在控制台中,我可以看到worker日志中接收队列中的作业的内容。作业永远不会执行,也不会在rq仪表板中显示,但我可以在Redis CLI中看到它。

我正在使用的版本:

rq==1.7.0

redis==3.5.0

下面是我的代码:

run.py中的Worker

代码语言:javascript
复制
import os

import redis
from rq import Worker, Queue, Connection

listen = ['stance_queue','default']

redis_url = os.getenv('REDIS_URL', 'redis://redis:6379')

conn = redis.from_url(redis_url)

# conn = redis.Redis(host='redis', port=6379)

if __name__ == '__main__':
    with Connection(conn):
        print("Createing worker")
        worker = Worker(map(Queue, listen))
        # worker = Worker([Queue()])
        worker.work()

然后我就派了一个任务

代码语言:javascript
复制
from workers.stance.run import conn

q = Queue('default', connection=conn)

@server.route("/task")
def home():

    if request.args.get("n"):
        print('create a job in default queue')
        job = q.enqueue( background_task,  args=(20,))
        return f"Task ({job.id}) added to queue at {job.enqueued_at}"

    return "No value for count provided"

这是后台工作

代码语言:javascript
复制
def background_task(n):

    """ Function that returns len(n) and simulates a delay """

    delay = 2

    print("Task running", flush=True)
    print(f"Simulating a {delay} second delay", flush=True)

    time.sleep(delay)

    print(len(n))
    print("Task complete")

    return len(n)  

这是rq-dashboard的屏幕截图

这是worker中的日志

代码语言:javascript
复制
Attaching to annotators_server_stance_worker_1
stance_worker_1      | Createing worker
stance_worker_1      | 08:33:44 Worker rq:worker:cae161cf792b4c998376cde2c0848291: started, version 1.7.0
stance_worker_1      | 08:33:44 Subscribing to channel rq:pubsub:cae161cf792b4c998376cde2c0848291
stance_worker_1      | 08:33:44 *** Listening on stance_queue, default...
stance_worker_1      | 08:33:44 Cleaning registries for queue: stance_queue
stance_worker_1      | 08:33:44 Cleaning registries for queue: default
stance_worker_1      | 08:33:49 default: home.annotator_server.background_task(20) (9f1f31e0-f465-4019-9dc6-85bc349feab9)

这是来自redis-cli的日志

代码语言:javascript
复制
mpose exec redis redis-cli


127.0.0.1:6379> keys *
1) "rq:workers"
2) "rq:failed:default"
3) "rq:clean_registries:default"
4) "rq:queues"
5) "rq:job:9f1f31e0-f465-4019-9dc6-85bc349feab9"
6) "rq:worker:cae161cf792b4c998376cde2c0848291"
7) "rq:workers:default"
8) "rq:clean_registries:stance_queue"
9) "rq:workers:stance_queue"

这是我的作曲

代码语言:javascript
复制
version: '3'
services:
  annotators_server:
    build:  
      context: .
      dockerfile: Dockerfile
    ports:
     - "5000:5000"
    volumes:
     - ./app:/home
    depends_on:
    - redis     
  redis:
    image: "redis:alpine"
  dashboard:
    image: "godber/rq-dashboard"
    ports:
      - 9181:9181
    command: rq-dashboard -H redis
    depends_on:
      - redis      
  stance_worker:
    build:  
      context: ./app/workers/stance
      dockerfile: Dockerfile
    environment: 
      - REDIS_URL=redis://redis:6379
    depends_on:
    - redis             

我从来没有看到作业执行的日志,我试图添加TTL和超时,但仍然面临相同的事情。

EN

回答 1

Stack Overflow用户

发布于 2021-11-26 13:43:24

启动dashboard和worker时,将redis数据库传递给连接字符串。Redis url = redis://redis-host:6379/0 (指的是数据库0 )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65104758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档