【发布时间】:2017-06-16 19:47:36
【问题描述】:
我正在使用 celery worker 从我的机器学习模型中获取结果。
我正在做的是将大型 numpy 数组(几兆字节)从客户端发送到 celery 任务并返回。
目前我在客户端 numpy 数组中序列化为 base64。当我在客户端或 celery worker 上直接从/向 Redis 存储/获取数据时,系统的性能比我让 celery 执行所有参数传递(numpy 的 base64)时快得多。
我也想使用 celery(带有“redis”代理)来传递 args/numpy 数组,而不是直接在客户端中使用 redis。你知道哪里有问题吗?我如何设置芹菜的配置以更有效地做到这一点(在客户端->经纪人->工人之间传递数据并返回给客户端)。
serialized = np.asarray(images).reshape((number_of_records, size)).ravel().tostring()
serialized = base64.b64encode(serialized)
#self.redis.set(key, serialized)
print('calling celery processor')
result = self.celery.send_task('process', args=[number_of_records, serialized], kwargs={})
returncode, result = result.get(timeout=1000, interval=0.1)
vs(这个更快,直接使用redis存储):
serialized = np.asarray(images).reshape((number_of_records, size)).ravel().tostring()
serialized = base64.b64encode(serialized)
self.redis.set(key, serialized)
print('calling celery processor')
result = self.celery.send_task('process', args=[number_of_records, key], kwargs={})
returncode, result = result.get(timeout=1000, interval=0.1)
resultc= self.redis.get(key)
关于 celery 的序列化、配置设置等性能的任何提示?我希望这个系统快速而简单。我真的应该像第二个例子那样直接使用redis吗?
【问题讨论】:
-
这个问题你解决了吗?
标签: python numpy serialization redis celery