Я пытаюсь заставить RQ/RQ-Worker работать в моем приложении Flask. Я попытался довести его до очень простого теста. Вот общая идея:RQ Рабочий, бросающий «ValueError»
- Пользователь посещает страницу
/test
. Который запускает задание в очередь и возвращает задание в очередиjob_key
- Рабочий (
worker.py
) обрабатывает задание в очереди. - Затем пользователь может перейти на страницу
/retrieve/<job_key>
, чтобы получить результат. [Это не показано.]
Текущая работа просто добавить 2 + 2.
Вот код приложения:
from rq import Queue
from rq.job import Job
# import conn from worker.py
from worker import conn
app = Flask(__name__)
q = Queue(connection=conn)
def add():
return 2+2
@app.route('/test')
def test():
job = q.enqueue_call(func="add", args=None, result_ttl=5000)
return job.get_id()
if __name__ == "__main__":
app.run()
worker.py
исходный код выглядит следующим образом:
from redis import StrictRedis
from rq import Worker, Queue, Connection
listen = ['default']
redis_url = 'redis://localhost:6379'
conn = StrictRedis.from_url(redis_url)
if __name__ == "__main__":
with Connection(conn):
worker = Worker(list(map(Queue, listen)))
worker.work()
Насколько мне известно, код приложения не является проблемой. Я могу посетить страницу /test
, которая закроет задание. Однако, как только я запускаю рабочий, я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "/home/<>/dev/sched/venv/lib/python3.5/site-packages/rq/worker.py", line 588, in perform_job
rv = job.perform()
File "/home/<>/dev/sched/venv/lib/python3.5/site-packages/rq/job.py", line 498, in perform
self._result = self.func(*self.args, **self.kwargs)
File "/home/<>/dev/sched/venv/lib/python3.5/site-packages/rq/job.py", line 206, in func
return import_attribute(self.func_name)
File "/home/<>/dev/sched/venv/lib/python3.5/site-packages/rq/utils.py", line 149, in import_attribute
module_name, attribute = name.rsplit('.', 1)
ValueError: not enough values to unpack (expected 2, got 1)
Я чувствую, как линия:
worker = Worker(list(map(Queue, listen)))
проблема только б/с от характера ошибки, но я не знаю, как это исправить. Особенно b/c I've seen other projects, которые, похоже, используют тот же самый рабочий исходный код.
Мой стек технологии:
- Колба (0.11.1)
- Redis (2.10.5)
- RQ (0.6.0)
- RQ-Worker (0.0.1)
EDIT:
Начинает думать, что это ошибка. Проверьте этот билет в RQ: issue #531.
Если не 'если имя == "__main __":' 'быть __name__' – Jonathan
Да @ Джонатан. Исправленный. – franklin