まわ

勉強したことや遊びのこと

Celeryのchainの使い方メモ

コメント

Celery(セロリ)のメモ。

実装例

並列処理する対象の関数、関数その1、その2があるとして、関数その1が一度終わったら、そのまま引数を引き継いで関数その2に受け渡す例 (具体例:メールを送信する関数1、成功・失敗をプリントする関数2)

app/tasks.py/

#app/tasks.py/

from celery import shared_task


@shared_task
def add(x, y):
    return 2 * x + y

@shared_task
def printer(z):
    string="some string"
    print("pre print==>",string)#redisのログに吐き出される
    return z

app/views.py/

#app/views.py/

from .tasks import *
from celery import chain

#urls.pyと連動したtest

def test(request):
    result = add.delay(3, 8) #通常のcelery関数ひとつ
    while not result.ready():
        print('spam')
    print(result.get()) 
        #プリントデバッグはこれ(これ以外はredisのログを見る)

    result = chain(add.s(4, 4), printer.s()).apply_async()
        #↑関数addに引数4,4を投入、
        #addの返り値"2 * x + y"を
        #関数printerの第一引数になる。
        #add.sのsはシグネイチャーという機能の略らしい
    print(result.get()) #プリントデバッグは同じ

    ・・・以下は通常のDjango.viewsと同じ

参考記事

qiita.com