7

関数にコールバックを追加して、返されたときに通常の python 関数を呼び出せるようにしたいのですが、

私の仕事

@celery.task                                                                                                                            
def add(x, y):                                                                                                                         
    return x + y 

どのように使用したいですか:

from __future__ import print_function
delay.add(2, 3 ,callback=lambda x: print x) 

ラムダの代わりに、セロリタスクで定義されていないが、タスクが呼び出された場所の任意の関数にすることができます。

4

1 に答える 1

5

この場合、タスクのみをリンクできます。

add.apply_async((2, 3), link=other_task.s())

これは次と同じです:

(add.s(2, 3) | other_task.s())()

タスクが完了するのを待つと、タスクが同期されるため、必要な呼び出しは次のようになります。

(lambda x: print(x))(add.delay(2, 3).get())

タスクが戻るまで現在のプロセスをブロックします。プロセスをブロックしたくない場合は、専用のスレッドを作成して結果を待機し、コールバックを呼び出す必要があります。

または、eventlet/gevent を使用して、ほとんど通常のコードを記述できます。

于 2012-09-14T12:49:51.313 に答える