0

次のようなセロリタスクとして登録されているpython関数があります。

import celery
@celery.task(base=MyTask)
def my_fn(*args,**kwargs):# dooing stuff

タスクが実行される直前にargsandが有効であることを確認したい。kwargsこの目的のために、クラスの関数をオーバーライドしようexecuteとしましたが、コードとドキュメントに記載されているように実行されません(少なくともそれは私が理解したものです!)runTask

execute run

のサンプル使用、run私が望むものに似ています

これが私のMyTaskクラスの定義方法です:

from celery import Task
class MyTask(Task):
    def run(self,*args,**kwargs): #does't get called.
    def execute(self,request,*args,**kwargs): #does't get called.

どのクラスまたは関数をオーバーライドする必要がありますか? これは不可能ですか?

少し早いですがお礼を!

4

1 に答える 1

1

関数をオーバーライド__call__すると、正しく機能することがわかりました。

コードは次のようになります。

from celery import Task
class MyTask(Task):
    def __call__(self,*args,**kwargs):
        #do stuff
        return super(...)...

より良い解決策があれば、それを見たいと思います。

于 2013-03-28T17:20:16.700 に答える