rabbitmq Celery可以在10ms内交付任务结果吗?

flmtquvp  于 2023-08-05  发布在  RabbitMQ
关注(0)|答案(1)|浏览(147)

我试图在celery上执行一个任务,然后用不到10ms的开销阻塞它的结果。
一个自包含的例子(tasks.py):

from celery import Celery

app = Celery('tasks', broker='librabbitmq://guest@localhost//', backend='amqp')

@app.task
def add(x, y):
    return x + y

字符串
测试脚本:

from timeit import timeit
from tasks import add

def f():
    add.delay(2, 2).get()

timeit(f, number=100)


在我的i5 8GB内存的debian linux机器上,每个请求的运行时间大约为40ms。
恕我直言,celery的后端依赖于轮询,所以对于低延迟的要求来说不是很理想吗?
该解决方案将需要交付低于10ms的RTT开销,大约每秒有4台机器添加任务,大约有2个任务工作者实际执行任务。

06odsfpq

06odsfpq1#

Celery可以(在2023年)在10 ms内返回结果,并且不再轮询Redis。
我最近研究了这个问题,因为我需要一个低延迟的任务队列。Celery可以在同一台机器(i3-10100)上,使用redis或rmq后端,在10 ms内持续完成阻塞分派→结果往返:
x1c 0d1x的数据

Celery仍然比直接使用后端慢。存在序列化、工人/孩子管理和ACK的开销。
Redis特别有一些很好的简单原语,用于手动滚动基本任务队列,这是我最终为延迟敏感应用程序选择的路线。

相关问题