簡體   English   中英

限制 Celery 中的活動任務數

[英]Limit number of active tasks in Celery

有任務

from celery import Celery
celery = Celery(__name__, **kwargs) # Some setting here probably?

@celery.task(name="task_runner", bind=True)
def generic_task(self, function_type):
    task_id = self.request.id
    # Do whatever
    if function_type == 1:
        high_ram_usage_1() # Really a high memory function
    if function_type == 2:
        high_ram_usage_2() # Another high memory function
    # Other functions

如何將整個 celery 應用程序的活動任務數限制為兩個? 我的記憶中只有兩個活動功能,最終導致我的開發計算機上的服務器崩潰。

編輯:

celery = Celery(__name__, concurrency=2) # Does not work
celery.conf.update(concurrency=2) # Does not work
@celery.task(concurrency=2) # Does not work
def dummy_task(self):
    time.sleep(5)

工作人員日志

<redacted>:Task dummy_task[b62052bf-c893-4ad4-bc30-cffaa39bcbb1] succeeded in 5.110082127997885s: True
<redacted>:Task dummy_task[a2def96d-6306-422a-be79-14f43886aa7f] succeeded in 5.104002231993945s: True
<redacted>:Task dummy_task[4b377742-c22f-432c-a675-9c0dbdd2cb41] succeeded in 5.119215640006587s: True
<redacted>:Task dummy_task[5735de81-79f7-43ac-b28c-42cb071011ca] succeeded in 5.139429216011195s: True
<redacted>:Task dummy_task[5b37c19f-693d-45d4-8580-6b493632c5ab] succeeded in 5.142507184995338s: True
<redacted>:Task dummy_task[d8b00cfc-0773-43cd-bc40-d5a55a1dfda0] succeeded in 5.158245797007112s: True
<redacted>:Task dummy_task[0d93b652-b4f9-4bff-97b5-0660cdc05586] succeeded in 5.168131768004969s: True
<redacted>:Task dummy_task[b7946f28-7df6-42d8-9a9d-1e7b5efc3a4a] succeeded in 5.173699700011639s: True
<redacted>:Task dummy_task[4f1f9389-040a-45dd-b252-4342ba1d3445] succeeded in 5.187171609024517s: True
<redacted>:Task dummy_task[6651040f-bffa-46b6-ab4f-950d8f518b46] succeeded in 5.192372458986938s: True
<redacted>:Task dummy_task[b65d2de1-5029-47f7-8048-73c4c38065ad] succeeded in 5.279150495975045s: True
<redacted>:Task dummy_task[3211729b-e8b9-4c72-9354-caf16e7a6970] succeeded in 6.117392421991099s: True

您不能在任務上指定並發,因此@celery.task(concurrency=2)不起作用。 @TharunK 指出的線程已經回答了你的問題,因為你有同樣的問題。 但是,您似乎並沒有完全理解它。

該線程的答案基本上是說您需要將 Celery 工作人員配置為產生不超過 N 個工作進程。 在你的情況下N = 2。

有幾種方法可以做到這一點,其中之一是 Celery worker 的--concurrency命令行選項。

您已經非常接近使用配置對象進行設置,但是您使用了錯誤的密鑰。 正確的鍵是worker_concurrency所以celery.conf.update(worker_concurrency=2)應該完成這項工作。

暫無
暫無

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

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