2016-06-28 3 views
1

Я пытаюсь заставить RQ/RQ-Worker работать в моем приложении Flask. Я попытался довести его до очень простого теста. Вот общая идея:RQ Рабочий, бросающий «ValueError»

  1. Пользователь посещает страницу /test. Который запускает задание в очередь и возвращает задание в очереди job_key
  2. Рабочий (worker.py) обрабатывает задание в очереди.
  3. Затем пользователь может перейти на страницу /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, которые, похоже, используют тот же самый рабочий исходный код.

Мой стек технологии:

  1. Колба (0.11.1)
  2. Redis (2.10.5)
  3. RQ (0.6.0)
  4. RQ-Worker (0.0.1)

EDIT:

Начинает думать, что это ошибка. Проверьте этот билет в RQ: issue #531.

+0

Если не 'если имя == "__main __":' 'быть __name__' – Jonathan

+0

Да @ Джонатан. Исправленный. – franklin

ответ

0

Для меня проблема была вызвана тем, что RQ не смог разрешить мой рабочий модуль.

Решение было поставить "квалифицированное" имя Епдиеие, например:

job = q.enqueue("app.worker.add", data) 
Смежные вопросы