如何向特定工人注册芹菜任务



我正在python/django开发Web应用程序,并且我有几个在芹菜中运行的任务。

我必须一次运行一个任务一个,因此我使用以下命令创建了使用-concurrency = 1的工作者,并将任务A路由到该工作。

celery -A proj worker -Q A -c 1 -l INFO

一切正常工作,因为该工人处理任务A和其他任务被路由到默认队列。

但是,上面的工作人员在使用inspect命令获取Worker的注册任务时返回所有任务。这是绝对正确的,因为当我启动工人时,它将显示项目的所有任务作为注册任务,但仅处理任务a。

以下是我启动它的工人的输出。

$ celery -A proj worker -Q A -c 1 -l INFO
 -------------- celery@pet_sms v4.0.2 (latentcall)
---- **** ----- 
--- * ***  * -- Linux-4.8.10-040810-generic-x86_64-with-Ubuntu-16.04-xenial 2018-04-26 14:11:49
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         proj:0x7f298a10d208
- ** ---------- .> transport:   redis://localhost:6379/0
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> A exchange=A(direct) key=A

[tasks]
  . task_one
  . task_two
  . task_three
  . A
  . task_four
  . task_five

有什么方法可以在芹菜中注册特定任务?

请注意您的工作者日志中的两个部分。

[queues]
  .> A exchange=A(direct) key=A
[tasks]
  . task_one
  . task_two
  . task_three
  . A
  . task_four
  . task_five

第一部分[queues]显示了队列您的工人消耗

显示A, exchange=A(direct), key=A,表明该工人仅消耗来自队列A的任务。这正是您想要的。您之所以达到此效果,是因为您通过命令$ celery -A proj worker -Q A -c 1 -l INFO启动工人时指定了-Q A

第二部分[tasks]显示了的所有注册任务

尽管已注册了其他任务,例如task_one task_five,但由于这些任务未进入队列A,因此该工作者不使用任务task_one task_five

相关内容

  • 没有找到相关文章

最新更新