我有两个芹菜任务,在两个不同的文件中实现。 Task1需要启动task2,因此task2是从task1导入的。
mypkg
| tasks
| task1.py
| task2.py
task1.py
from mypkg.tasks.task2 import task2
celery_app = Celery('mypkg.tasks.task1', broker='redis://localhost')
@celery_app.task
def task1():
print('Do task 1')
// Then call task2
task2.delay()
task2.py
celery_app = Celery('mypkg.tasks.task2', broker='redis://localhost')
@celery_app.task
def task2():
print('Do task 2')
当我使用以下命令启动celery时,尽管我只期望task1,但两个任务都运行:
pipenv run celery -A mypkg.tasks.task1 worker --loglevel=info
最可能的原因是task1导入task2。如何告诉celery只运行task1中找到的任务?
答案 0 :(得分:2)
如果这是您真正想要的,只需将您的实例放在不同的代理URL上,例如
celery_app = Celery('mypkg.tasks.task1', broker='redis://localhost/1')
。 。 。和。 。
celery_app = Celery('mypkg.tasks.task2', broker='redis://localhost/2')
尽管您可以执行此操作,但我建议使用using routing and queues来指定由哪些工作人员处理哪些任务。路由是一个深入的主题,但是一旦掌握了它,就很简单了。