作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在执行以下用例时,我目前的性能不佳:
我有两个文件 - 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]
并运行.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')
当我尝试运行 celery 时: celery -A tasks worker --loglevel=info
并尝试运行:
python run.py
这是我得到的输出:
>celery: 0.19174742698669434 seconds
>normal: 0.004475116729736328 seconds
我不知道为什么 celery 的表现更差?
我试图了解如何使用 celery 实现 map-reduce 范式,例如将一个巨大的数组拆分成较小的 block ,进行一些处理并返回结果
我是否遗漏了一些关键配置?
最佳答案
Map-reduce 范式不应该更快,但可以更好地缩放。
与实现相同计算的本地运行作业相比,MR 作业始终存在开销:进程调度、通信、混洗等。
您的基准测试不相关,因为 MR 和本地运行都是两种方法,具体取决于数据集大小。在某些时候,您会从本地运行方法切换到 MR 方法,因为您的数据集对于一个节点来说太大了。
关于python - 使用 celery 在简单任务中表现不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49532169/
我是一名优秀的程序员,十分优秀!