簡體   English   中英

將任務發送給 celery 中的兩個單獨的工作人員

[英]Send tasks to two separate workers in celery

我在 celery 中有兩個任務,想將它們發送給不同的工作人員來完成,但我不知道該怎么做。 我查看了 celery 文檔的 task_routes 部分,並從 stackoverflow 嘗試了一些東西,但沒有運氣。

任務.py

@app.task
def task1():
     does something


@app.task
def task2():
     does something else

我有兩個 celery 工作人員,我希望他們每個人都專注於一項任務,因此 worker1 在 task1 上,worker2 在 task2 上

celery.py

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')

app = Celery('project')

app.conf.timezone = 'Europe/London'

app.config_from_object('django.conf:settings')
app.conf.update(BROKER_URL=str(os.getenv('REDIS_URL')),
                CELERY_RESULT_BACKEND=str(os.getenv('REDIS_URL')),
                broker_use_ssl = {
                        'ssl_cert_reqs': ssl.CERT_NONE
                    },
                    redis_backend_use_ssl = {
                        'ssl_cert_reqs': ssl.CERT_NONE
                    })
                
app.autodiscover_tasks()

然后 procfile -

web: gunicorn project.wsgi --log-file -
worker1: celery -A project worker -l INFO --concurrency=1 -Ofair -n worker1.%h
worker2: celery -A project worker -l INFO --concurrency=1 -Ofair -n worker2.%h

如何設置隊列以便worker1 = task1 和worker2 = task2?

您可以為不同的任務設置兩個單獨的隊列:

# 'your.project.tasks.task2' is same as import path
app.conf.task_routes = {'your.project.tasks.task2': {'queue': 'some_special_queue'}}

並運行 Celery 為:

# you may add -Q celery to first command (celery is a default queue name if you didn't specify it)
celery -A project worker -l INFO --concurrency=1 -Ofair -n worker1.%h 
celery -A project worker -l INFO --concurrency=1 -Ofair -n worker2.%h -Q some_special_queue

task2會將消息添加到some_special_queue並且只有worker2監聽這個隊列

所有其他任務將由標准celery隊列處理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM