簡體   English   中英

Celery 不並行執行組塊

[英]Celery does not execute group of chunks parallel

我有塊列表,它們是文件名

chunks_list = [["file_1", "file_2", "file_3"], ["file_4", "file_5", "file_6"], ...]

我有一個處理這些塊的任務:

@celery_app.task
def process_files_task(files: List[str]):
    for file in files:
        logger.info(file)
        # processing each file

我需要並行運行塊,而chunks_list有 8 個塊。 所以 celery 工作線程並發也是 8。我像這樣運行我的任務:

chunks_group = process_files_task.chunks([(chunk,) for chunk in chunks_list], 8).group()
chunks_group.delay().get()

問題是所有任務僅由一名工人執行。 這就是我在日志中看到的:

[INFO/ForkPoolWorker-4] file_1
[INFO/ForkPoolWorker-4] file_2
[INFO/ForkPoolWorker-4] file_3
[INFO/ForkPoolWorker-4] file_4
...

請告訴我我做錯了什么讓每個免費的分叉者都執行任務

您可以將worker_prefetch_multiplier設置為 1。

一次預取多少消息乘以並發進程數。 默認值為 4(每個進程 4 條消息)。 然而,默認設置通常是一個不錯的選擇——如果您有很長時間運行的任務在隊列中等待並且您必須啟動工作程序,請注意,第一個啟動的工作程序將收到最初四倍的消息數量。 因此,任務可能不會公平地分配給工人。

更多細節在這里

文檔並不清楚塊是否應該並行執行,但他們確實提到塊可以轉換為組(應該是並行的)。

文檔中的示例:

>>> group = add.chunks(zip(range(100), range(100)), 10).group()

暫無
暫無

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

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