これはおそらくキャプテンの明らかなスタイルの質問ですが、何かが足りないような気がします。
Celeryタスクを作成するPythonWSGIアプリを継承しました。これは次のようになります。
#web.py
from bottle import route, run, request, response, abort
import bottle
from project.tasks import process_request
@route('/')
def web():
url = request.query_string
process_request.delay(
url=url,
path=request.path,
query=request.query_string,
cookies=dict(request.cookies),
headers=dict(request.headers),
remote_addr=request.remote_addr,
)
メソッドは次のprocess_request
ようになります。
#tasks.py
@celery.task
def process_request(url, path, query, cookies, headers, remote_addr):
#does some stuff
上記のすべてが機能します。process_requestにタイムスタンプを追加しようとしたので、呼び出しは次のようになります。
#web.py
#imports from above
from datetime import datetime
@route('/')
def web():
url = request.query_string
process_request.delay(
url=url,
path=request.path,
query=request.query_string,
cookies=dict(request.cookies),
headers=dict(request.headers),
remote_addr=request.remote_addr,
s_time=str(datetime.now())
)
そして、process_request
メソッドを次のように変更しました。
#tasks.py
@celery.task
def process_request(url, path, query, cookies, headers, remote_addr, s_time):
#does some stuff
それはうまくいきませんでした。リクエストは処理されていませんでした。celerydログファイルを確認したところ、次のことがわかりました。
[2013-03-26 16:19:03,330: ERROR/MainProcess] Task beacon.tasks.process_request[235f9fa8-1f10-4ee0-a1f9-e389021ea0ad] raised exception: TypeError('process_request() takes exactly 7 non-keyword arguments (6 given)',)
Traceback (most recent call last):
File "/home/beacon/.virtualenvs/beacon/lib/python2.6/site-packages/celery/task/trace.py", line 228, in trace_task
R = retval = fun(*args, **kwargs)
File "/home/beacon/.virtualenvs/beacon/lib/python2.6/site-packages/celery/task/trace.py", line 415, in __protected_call__
return self.run(*args, **kwargs)
TypeError: process_request() takes exactly 7 non-keyword arguments (6 given)
何が間違っているのかわかりません。誰かアイデアはありますか?