Cos*_*pel 5 python serialization numpy redis celery
我正在使用celery worker从我的机器学习模型中获取结果。
我正在做的是从客户端向celery任务发送并返回大的numpy数组(几兆字节)。
目前,我正在将客户端numpy数组序列化为base64。当我直接从客户端或celery worker上的Redis存储/获取数据时,系统的性能要比/当我让celery完成所有参数传递(numpy的base64)时的系统性能要快得多。
我也想使用celery(带有'redis'代理)来传递args / numpy数组,而不是直接在客户端中进行redis。您知道哪里可能出问题吗?我如何设置celery的配置以更有效地做到这一点(在客户端->经纪人->工人之间传递数据,然后再传回客户端)。
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
有关celery进行序列化,配置设置等的任何技巧?我希望该系统快速简单。我是否应该像第二个示例一样直接使用redis?
Celery 使用 JSON 或 cPickle 来序列化消息。因此,可能发生的情况是您要序列化两次 - 首先序列化为 base64(效率低下),然后序列化为 JSON 或 cPickle。
您是否尝试过完全跳过 Base64 编码并让 Celery 处理它?
您可以通过以下代码告诉 Celery 使用 cPickle (更高效)而不是 JSON (默认):
app.conf.task_serializer = 'pickle'
app.conf.result_serializer = 'pickle'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
949 次 |
最近记录: |