2016-06-28 5 views
1

FlaskアプリケーションでRQ/RQ-Workerを実行しようとしています。私はそれを非常に簡単なテストケースにまで落とそうとしました。"ValueError"を投げるRQワーカー

  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ソースコードは次のようになります。

私の知る限り、アプリケーションコードは問題ではありません。ジョブをエンキューする/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-労働者(0.0.1)

EDIT

これはバグだと考えるのが始まりです。 RQの出典:issue #531でこの発行チケットをチェックしてください。

+0

はならない '名前場合== "__main __"::'はい__name__' – Jonathan

+0

@ジョナサン 'こと

ソリューションはエンキュー、例えばに "修飾" 名を供給することでした。修正されました。 – franklin

答えて

0

私の問題は、RQがワーカーモジュールを解決できないために発生しました。

job = q.enqueue("app.worker.add", data) 
関連する問題