在简单任务中使用芹菜的表现不佳



我当前在执行以下用户酶时面对低标准:

我有两个文件-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')

当我尝试跑步芹菜时: 芹菜-A任务工人 - loglevel = info

尝试运行:

python run.py

这是我得到的输出:

>celery: 0.19174742698669434 seconds
>normal: 0.004475116729736328 seconds

我不知道为什么芹菜的表现更糟?

我试图了解如何使用芹菜(例如将巨大的阵列分为较小的块,进行一些处理并带回结果(才能实现地图还原范式。

我是否缺少一些关键配置?

map-reduce范式不应该更快,而是在缩放时更好。

与实施相同计算的本地运行作业相比,MR工作总是有一个开销:流程计划,通信,改组等

您的基准不是相关的,因为MR和本地运行都是方法,具体取决于数据集的大小。在某个时候,您可以从本地运行方法转换为MR方法,因为您的数据集对于一个节点而言太大。

相关内容

  • 没有找到相关文章

最新更新