python - 可序列化文件对象
问题描述
试图得到与此类似的问题的答案。我有一个生成文件(pdf)的芹菜任务,然后需要将其发送回redis,以便API可以将其提供给最终用户。
创建一个可序列化的文件对象的最佳方法是保持文件名属性与之关联?它适用于 bytesIO,但 API 不知道它正在处理的文件,因此不知道在响应中给它什么文件名。
我相信实现这个工作流程的最佳方法是部署 minio 或其他可以处理文件对象生命周期的对象存储。我们已经部署了 redis,并且考虑到对象的生命周期只是几分钟的问题;redis 应该适合这项工作。
解决方案
如果生成的 PDF 文件不是太大,将它们存储在 Redis 中应该很简单。请记住,存储在 Redis 中的所有内容都是二进制 blob。即使它们很大,您也可能会遇到 Redis 完成的一些缓存驱逐。有了聪明的过期策略,一个像样的 Redis 服务器应该没问题。
真正的问题是如果你想将 PDF 文件传递给你的 Celery 任务。不要那样做。相反,将 Redis 密钥传递给您的 Celery 任务,以便它知道从哪里获取 PDF 文件的内容(或 S3 密钥,或类似的)。一般来说,这对任何事情都是一个很好的策略(不要将大对象传递给 Celery 任务)。为什么会这样?- 因为任务参数和元数据通常存储很长时间。
推荐阅读
- r - RStudio:在源文件位置运行 .Rprofile
- date - 我需要在 Access 中拆分以 MM/YYYY 和 MM/DD/YYYY 格式存储日期的文本列,以删除日期格式
- python - 如何使用numpy有效地获取矩阵数组(6749568、3、3)与向量数组(6749568、3)的点积
- python-3.x - 有没有办法将循环输出写入文件?
- sql - 需要从其他表的结果更新一个表
- python - 如何读取压缩文件夹中的 .pkl 文件
- reactjs - 我如何在来自 firebase 的 react js 中迭代这些数据并捕获用户生成的关键数据
- swift - RealityKit – 无法正确旋转对象
- excel - 如何跨多个工作簿/工作站维护 Power Query 代码?
- javascript - 如何根据注入的组件对组件中的 *ngFor 进行切片?