簡體   English   中英

在使用芹菜的簡單任務中表現不佳

[英]Poor performance in simple tasks using celery

我在執行以下用例時目前面臨低於性能的問題:

我有兩個文件 - tasks.py

# tasks.py
from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//', backend='rpc://',worker_prefetch_multiplier=1)

@app.task
def task(array_of_elements):
    return [x ** 2 for x in array_of_elements]

和run.py

# run.py
from celery import group
from itertools import chain, repeat
from tasks import task
import time

def grouper(n, iterable, padvalue=None):
    return zip(*[chain(iterable, repeat(padvalue, n-1))]*n)

def fun1(x):
    return x ** 2

if __name__ == '__main__':
    start = time.time()
    items = [list(x) for x in grouper(10000, range(10000))]
    x = group([task.s(item) for item in items])
    r = x.apply_async()
    d = r.get()
    end = time.time()
    print(f'>celery: {end-start} seconds')

    start = time.time()
    res = [fun1(x) for x in range(10000)]
    end = time.time()
    print(f'>normal: {end-start} seconds')

當我嘗試運行芹菜時:芹菜 - 任務工作者--loglevel = info

並嘗試運行:

python run.py

這是我得到的輸出:

>celery: 0.19174742698669434 seconds
>normal: 0.004475116729736328 seconds

我不知道為什么芹菜的表現會更差?

我試圖了解如何使用celery實現map-reduce范例,例如將一個巨大的數組拆分成更小的塊,進行一些處理並將結果帶回來

我錯過了一些關鍵配置嗎?

Map-reduce范例不應該更快,但要更好地擴展。

與實現相同計算的本地運行作業相比,MR作業始終存在開銷:進程調度,通信,重排等。

您的基准測試不相關,因為MR和本地運行要么接近,要么取決於數據集大小。 在某些時候,您將從本地運行方法切換到MR方法,因為您的數據集對於一個節點而言變得太大。

暫無
暫無

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

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