2016-12-22 19 views
0

私はプラグイン可能なアプリケーションを持っています。私はDjangoシステム用に開発中です。私はDjangoのシステムのために開発していますプラグイン可能なアプリを持っているCeleryサブタスクキューを定義する場所

@app.task(name='tasks.generate_notifications') 
def generate_notifications(...): 

installable_app.tasks

:その中で、私はそうのようになります通知を作成するためのタスクを持っています。今、私は、これはセロリビートは設定を使用して達成することができ、定期的に実行したい

@app.task(name='tasks.generate_notifications') 
def generate_notifications(...): 
    clients = get_list_of_clients() 
    for client in clients: 
    client_generate_notification.delay(client['name'], client['id']) 
    return "Notification Generation Complete" 

@app.task 
def client_generate_notification(client_name, client_id): 
    ... 
    return result 

installable_app.tasks:その中で、私はそうのようになります通知を作成するためのタスクを持っています。私はまた、独自のキューになりたい:

settings.py:

CELERYBEAT_SCHEDULE ={ 
    {'generate_schedule_notifications': { 
    'task': 'tasks.generate_notifications', 
    'schedule': crontab(hour=6, minute=0), 
    'options': {'queue': 'notification_gen'}, 
    'args': ('schedule', 'Equipment', 'HVAC')}, 
    } 
} 

最初のタスク、generate_notificationsがキューnotification_gen上で正しく実行されますが、client_generate_notificationサブタスクは、デフォルトのキュー上で実行されています。

@taskデコレータでキューを指定することはできますが、これはdjangoアプリケーションなので、実際にどこで実行されるかは指定したいと思います。

私はCELERY_ROUTESオプションを使用してみましたが、試してみると、実行中の他のタスクのキューが上書きされているようです。

可能なすべてのキューをCELERY_ROUTESに定義するのがベストプラクティスですか。どちらのキューも同じキューで実行されるようにタスクを設定する方が良いでしょうか?

+0

あなたは 'CELERY_ROUTES'設定を与えることができますか? – Jinje

答えて

0

itのようにしますか?

関連する問題