前もって感謝します :)
私はこの非同期Celeryタスクコールを持っています:
update_solr.delay(id, context)
ここで、id は整数で、context は Python dict です。
私のタスク定義は次のようになります。
@task
def update_solr(id, context):
clip = Clip.objects.get(pk=id)
clip_serializer = SOLRClipSerializer(clip, context=context)
response = requests.post(url, data=clip_serializer.data)
ここclip_serializer.data
で、 は dict でありurl
、URL を表す文字列です。
を呼び出そうとするとupdate_solr.delay()
、次のエラーが発生します。
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
タスクの引数はどちらもインスタンス メソッドではないため、混乱しています。
タスク コードが同期的に実行される場合、エラーは発生しません。
更新: オブジェクトの代わりに pk を渡すことに関するコメントごとに修正しました。