有关将芹菜与远程存储一起使用的 sorl 缩略图的指针



我很惊讶在搜索如何使用带有 sorl 缩略图和 S3 的芹菜任务时,除了"使用芹菜"之外什么也没看到。

问题:使用远程存储会导致生成缩略图时出现大量延迟(对于具有许多缩略图的页面,请考虑 100s+(,而缩略图引擎从远程存储下载原件,处理它们,然后上传回 s3。

在 sorl 中设置芹菜任务的好地方在哪里,我应该怎么称呼?

您的任何经验/想法将不胜感激。

我将开始挖掘 Sorl 内部,以找到一个更有用的地方来延迟此任务,但还有几件事我很好奇这是否以前已经解决过。

  1. 立即返回什么图像?必须以某种方式告诉 Sorl,返回的图像不是真正的缩略图。当芹菜完成任务时,缓存必须失效。

  2. 干净地处理多个缩略图生成请求(对于给定的缓存键,只需要第一个请求(

目前,我已经通过使用nginx反向代理缓存暂时解决了这个问题,该缓存可以在后端花时间生成昂贵的页面(在巨大的产品网格上调整巨大的PNG大小(时提供命中,但这是一个非常手动的过程。

我认为您要做的是THUMBNAIL_BACKEND设置为覆盖_create_thumbnail方法的自定义类。不是在该函数中生成缩略图,而是踢一个芹菜任务,该任务使用与给定函数相同的参数调用_create_thumbnail。缩略图在请求期间不可用,但会在后台生成。

我了解,Sorl 在 S3 存储上可以正常工作,但它非常慢。

我相信您知道您需要什么图像尺寸。

您应该在上传图像后启动芹菜任务。在任务中调用 sorl.thumbnail.default.backend.get_thumbnail(file, geometry_string, **options)

Sorl 将生成缩略图并将其上传到 S3。下次您从模板请求图像时,它已经缓存并直接从亚马逊的服务器提供

在处理占位符缩略图图像

时处理占位符缩略图图像的干净方法。

为此,您需要覆盖 Sorl 后端。向get_thumbnail函数添加新参数,例如 generate=False .何时从芹菜传递generate=True调用此函数

在函数更改中,它是逻辑,因此如果拇指不存在并且generate为 True,则您就像标准后端一样工作,但如果 generate 为 false,则返回带有文本的占位符图像,例如"我们现在处理您的图像,稍后再回来">并且不要调用backend._create_thumbnail。在这种情况下,如果您认为缩略图可能会被意外删除,则可以启动任务。

我希望这有帮助

你可以使用Sorlery。它结合了索尔和芹菜,通过工人创建缩略图。非常小心,不要在工作线程之外进行任何文件系统访问。

可以通过将THUMBNAIL_DUMMY_SOURCE设置为适当的占位符来控制立即返回的缩略图(在工作人员有机会之前(。

作业在第一次请求缩略图时创建,后续请求将提供给虚拟图像,直到工作线程完成。

最新更新