2011-07-02 6 views
1

セロリの作業者にタスクを渡そうとするとこのエラーが発生します。ここにトレースバックがありますセロリエエラー: "strオブジェクトが呼び出せません"、getstate()関数が文字列です

Traceback: 
File "/home/vivek/xpython/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/core/handlers/base.py" in get_response 
111.       response = callback(request, *callback_args, **callback_kwargs) 

File "/home/vivek/projects/engine/engine/web/models.py" in fb_sync 
53.   process_metadata.delay(self, wrapper) 

File "/home/vivek/xpython/lib/python2.6/site-packages/celery-2.2.7-py2.6.egg/celery/task/base.py" in delay 
338.   return self.apply_async(args, kwargs) 

File "/home/vivek/xpython/lib/python2.6/site-packages/celery-2.2.7-py2.6.egg/celery/task/base.py" in apply_async 
460.           **options) 

File "/home/vivek/xpython/lib/python2.6/site-packages/celery-2.2.7-py2.6.egg/celery/app/amqp.py" in delay_task 
230.   send(body, exchange=exchange, **extract_msg_options(kwargs)) 

File "/home/vivek/xpython/lib/python2.6/site-packages/kombu-1.1.6-py2.6.egg/kombu/compat.py" in send 
101.   return self.publish(*args, **kwargs) 

File "/home/vivek/xpython/lib/python2.6/site-packages/kombu-1.1.6-py2.6.egg/kombu/messaging.py" in publish 
124.     compression, headers) 

File "/home/vivek/xpython/lib/python2.6/site-packages/kombu-1.1.6-py2.6.egg/kombu/messaging.py" in _prepare 
147.    body) = encode(body, serializer=serializer) 

File "/home/vivek/xpython/lib/python2.6/site-packages/kombu-1.1.6-py2.6.egg/kombu/serialization.py" in encode 
119.   payload = encoder(data) 

File "/home/vivek/xpython/lib/python2.6/copy_reg.py" in _reduce_ex 
84.   dict = getstate() 



Exception Type: TypeError at /login/ 
    Exception Value: 'str' object is not callable 

    /home/vivek/xpython/lib/python2.6/copy_reg.py in _reduce_ex 
     dict = getstate() ... 

local variables 
{'args': (<web.models.User object at 0x8b47b4c>,<web.fb.Facebook object at 0x8b4fbac>), 
'eta': None, 
'expires': None, 
'id': '8d8e6c0b-a269-4780-9c48-77e689037322', 
'kwargs': {}, 
'retries': 0, 
'task': 'web.models.process_likes'} 


What is the solution to this problem? When I remove the task decorator, it works fine. 
+1

@Vivek、コードの書式設定にhtmlタグを使用しないでください。適切に書式設定されたコードを取得するには、編集サイドバーに示すように、4行分インデントします。 – senderle

+0

申し訳ありませんが、今すぐ更新しました。 –

答えて

2

シリアル化できないタスクにオブジェクトを渡そうとしています。より単純なデータ(タスクの実行時に複雑なオブジェクトを再作成するための情報)を渡すようにしてください。

実際のエラーの原因がわかりませんが、とにかくDjangoモデルをタスクに渡すべきではありません。そうでなければ競争条件にぶつかるでしょう。被写体にCelery documentationを参照してください:

They shouldn’t be passed on as arguments to tasks. It’s almost always better to re-fetch the object from the database when the task is running instead, as using old data may lead to race conditions.

ユーザーオブジェクトと何でもあなたの代わりに、単純なPythonの種類として相互作用のようにFacebookを利用して特定し、何を再作成するタスクの中から、その情報を使用する必要があるために一意のキーを渡します代わりにタスクを実行する必要があります。

+0

ありがとう、それは問題でした、私が渡そうとしていたオブジェクトはカスタムORMモデルでした。 –

関連する問題