如何仅在芹菜中运行选定的任务

时间:2019-09-20 16:03:40

标签: python celery

我有两个芹菜任务,在两个不同的文件中实现。 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中找到的任务?

1 个答案:

答案 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来指定由哪些工作人员处理哪些任务。路由是一个深入的主题,但是一旦掌握了它,就很简单了。