RQ工人抛出“ValueError”

时间:2016-06-28 14:38:30

标签: python redis

我正试图在我的Flask应用程序上运行RQ / RQ-Worker。我试图将其归结为一个非常简单的测试用例。这是一般的想法:

  1. 用户访问/test页面。这会触发要排队的作业并返回排队作业的job_key
  2. 工作人员(worker.py)处理排队的工作。
  3. 然后,用户可以访问/retrieve/<job_key>页面以检索结果。 [未显示。]
  4. 目前的工作只是增加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的错误性质,但我不知道如何解决它。特别是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)
    5. 修改

      开始认为这是一个错误。查看RQ源代码中的此问题单:issue #531

1 个答案:

答案 0 :(得分:0)

对我来说,问题是由于RQ无法解析我的工作模块。

解决方案是将“合格”名称提供给入队,例如:

job = q.enqueue("app.worker.add", data)