Flask -RQ2 Ошибка Redis: ZADD требует одинакового количества значений и баллов - PullRequest
0 голосов
/ 04 февраля 2020

Я пытался реализовать настройку basi c Flask -RQ2 согласно документам , чтобы попытаться выполнить одновременную запись в два отдельных файла, но я получаю следующую ошибку Redis: redis.exceptions.RedisError: ZADD requires an equal number of values and scores когда работник пытается выполнить задание в очереди Redis.

Вот полная трассировка стека:

10:20:37: Worker rq:worker:1d0c83d6294249018669d9052fd759eb: started, version 1.2.0
10:20:37: *** Listening on default...
10:20:37: Cleaning registries for queue: default
10:20:37: default: tester('time keeps on slipping') (02292167-c7e8-4040-a97b-742f96ea8756)
10:20:37: Worker rq:worker:1d0c83d6294249018669d9052fd759eb: found an unhandled exception, quitting...
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/rq/worker.py", line 515, in work
    self.execute_job(job, queue)
  File "/usr/local/lib/python3.6/dist-packages/rq/worker.py", line 727, in execute_job
    self.fork_work_horse(job, queue)
  File "/usr/local/lib/python3.6/dist-packages/rq/worker.py", line 667, in fork_work_horse
    self.main_work_horse(job, queue)
  File "/usr/local/lib/python3.6/dist-packages/rq/worker.py", line 744, in main_work_horse
    raise e
  File "/usr/local/lib/python3.6/dist-packages/rq/worker.py", line 741, in main_work_horse
    self.perform_job(job, queue)
  File "/usr/local/lib/python3.6/dist-packages/rq/worker.py", line 866, in perform_job
    self.prepare_job_execution(job, heartbeat_ttl)
  File "/usr/local/lib/python3.6/dist-packages/rq/worker.py", line 779, in prepare_job_execution
    registry.add(job, timeout, pipeline=pipeline)
  File "/usr/local/lib/python3.6/dist-packages/rq/registry.py", line 64, in add
    return pipeline.zadd(self.key, {job.id: score})
  File "/usr/local/lib/python3.6/dist-packages/redis/client.py", line 1691, in zadd
    raise RedisError("ZADD requires an equal number of "
redis.exceptions.RedisError: ZADD requires an equal number of values and scores

Моя главная задача такова:

#!/usr/bin/env python3

from flask import Flask
from flask_rq2 import RQ
import time
import tester

app = Flask(__name__)

rq = RQ(app)

default_worker = rq.get_worker()
default_queue = rq.get_queue()

tester = tester.Tester() 

while True:
    default_queue.enqueue(tester.tester, args=["time keeps on slipping"])
    default_worker.work(burst=True)
    with open('test_2.txt', 'w+') as f:
        data = f.read() + "it works!\n"
    time.sleep(5)

if __name__ == "__main__":
    app.run()

и мой Модуль tester.py выглядит следующим образом:

#!/usr/bin/env python3

import time

class Tester:

    def tester(string):
        with open('test.txt', 'w+') as f:
            data = f.read() + string + "\n"
            f.write(data)
        time.sleep(5)

Я использую следующее:

python==3.6.7-1~18.04
redis==2.10.6
rq==1.2.0
Flask==1.0.2
Flask-RQ2==18.3

Я также попробовал более простую настройку из документации, где вы не указали ни очереди или работника, но неявно полагаются на значения по умолчанию для модуля Flask -RQ2 ... Любая помощь с этим будет принята с благодарностью.

1 Ответ

1 голос
/ 05 февраля 2020

Чтение документов немного глубже, кажется, для работы с Redis <3.0 вам нужно <code>Flask-RQ2==18.2.2.

У меня сейчас разные ошибки, но я могу работать с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...