2016-09-10 3 views
0

셀러리 작업에는 하위 프로세스를 호출 할 수 없다는 제한이 있습니다. 콜백 및 기타 캔버스 기능은 다양한 캔버스 기능을 통해 작업이 호출되고 관련되는 방식에 따라 처리됩니다. 셀러리 비트를 통해 작업을 예약 할 때 유일한 옵션은 캔버스 기능이없는 단일 작업을 호출하는 것입니다. 콜 백이있는 작업을 예약해야합니다. 셀러리에서 그렇게 할 수 있습니까? 가능한 한 단일 작업에서 필요한 작업을 수행 할 수는 있지만 상당한 메모리 오버 헤드가 발생하고 많은 db 히트와 함께 실행하는 데 오랜 시간이 걸릴 수 있습니다. 그거 좋은 생각이야?캔버스 기능이있는 셀로 비트에서 작업을 예약하는 방법

답변

2

필요한 서명을 생성하여 options 사전에 전달할 수 있습니다.

[2017-04-07 00:00:00,000: WARNING/PoolWorker-2] sum: 12 
[2017-04-07 00:00:00,050: WARNING/PoolWorker-2] divide: 3 
:

from datetime import timedelta 
from celery import Celery, signature 

app = Celery('tasks', broker='redis://localhost') 
app.conf.update(
    beat_schedule={'add_divide': {'task': 'tasks.add', 
            'args': (5, 7), 
            'schedule': timedelta(seconds=10), 
            'options': {'queue': 'testq', 
               'link': signature('tasks.divide', 
                   args=(4,), 
                   queue='testq' 
               ) 
             } 
          } 
        } 
) 


@app.task 
def add(x, y): 
    z = x + y 
    print('sum: {0}'.format(z)) 
    return z 


@app.task 
def divide(x, y): 
    z = x/y 
    print('divide: {0}'.format(z)) 
    return z 

같은 celery worker -A tasks.celery -Q testq --beat -c1 의지 출력 뭔가를 실행 : 다음은 간단한 체인 작업 tasks.py입니다

관련 문제