从芹菜工作者任务组

时间:2018-03-15 15:12:33

标签: python python-3.x python-2.7 celery django-celery

我有一个芹菜工人,其中定义了处理功能(alpha_task)。我想从INSIDE这个职能部门(alpa_task)向芹菜工人提交另一份工作。新工作将负责处理计算结果。

所以简单地说,我希望结果由另一个芹菜工人池处理。 一个池负责执行该工作,另一个池负责处理结果。

芹菜工人 - >提交作业进行结果处理 - >另一位芹菜工人

我正在考虑使用不同的路由键和队列,因此工作人员不会将结果处理作业提交给他们自己,但它似乎不起作用。

  1. 我有一个芹菜工人的代码。
  2. app = Celery('celery_worker_A', backend='backendstring', broker='brokerstring')

    @app.task def process_alpha_task(json_input): processor = TaskProcessor() r = processor.process(json_input) app.send_task('process_result', args=[r], kwargs={},queue='queue_result_processing', routing_key='key_result_processing')

    问题在于,新提交的任务正在发送给同一个工作人员,该工作人员正在执行" alpha"任务,我收到有关未定义任务的错误,名为" process_result"这当然是真的。

    我甚至尝试使用强制队列来运行这个芹菜工作者,因此它不会轮询除alpha_tasks之外的任何其他任务。

    celery -A proj worker -Q alpha_tasks.

    但它仍然似乎向自己提交任务并轮询它,即使我在send_task()和路由键中定义了其他队列。

    如何实现我的目标,使用不同的芹菜工人处理结果?

    //编辑:

    我还有一个例子,应该更清楚。

    显式运行worker以仅从task_processor队列处理任务:

    celery worker -A task_processor -Q task_processor

    task_processor.py
    
    app = Celery('task_processor', backend=config.get('CELERY', 'backend'), broker=config.get('CELERY', 'broker'))
    
    #submit new task and route to resultprocessor queue, Shouldn't be processed by this worker.
    def test():
        app.send_task('process_result', args=["ABC"], kwargs={}, queue="resultprocessor", routing_key="resultprocessorkey")
    
    #TASK ROUTED CORRECTLY on worker start, NOT SUBMITTED TO THEMSELFS
    test()
    
    @app.task
    def process_task(json_input):
        print("Processing task")
        #TASK ROUTING FAILED WHEN CALLED INSIDE BODY OF TASK, SUBMITTING TO THEMSELFS.
        test()
        print("Submitted request to  process result")
    

0 个答案:

没有答案