将图像传递给 celery 任务

Posted

技术标签:

【中文标题】将图像传递给 celery 任务【英文标题】:Passing an image to a celery task 【发布时间】:2012-03-22 13:38:44 【问题描述】:

我正在编写的应用程序的一部分允许用户上传图像,然后我调整其大小并自动上传到 amazon s3。目前,图像大小调整正在视图中进行,我想通过 celery 将其卸载到分布式工作人员。我的问题是将图像提供给工人的最佳方式是什么。我目前的想法是将图像直接存储在数据库中,然后将 id 传递给工作人员并让它检索它。有没有更好的做法,然后将其暂时存储在数据库中,直到可以处理?

【问题讨论】:

【参考方案1】:

正如 celery 文档中所述,最好不要将整个事物(图像)作为参数传递,因为这会导致额外的开销。所以最好先保存它,然后将照片 id 作为参数传递,将图像检索到任务中并进行调整大小/上传。

【讨论】:

但是除了直接保存到 postgresql 之外,还有其他选择吗? 看看这里***.com/questions/4330719/…【参考方案2】:

您不能将实际图像传递给 Celery,因为图像不能被腌制,但是您可以解构图像并将其所有数据发送给 celery 工作人员,在那里您可以轻松地重建图像,然后做任何您想做的事情它。

我构建了一个小型应用程序,它将图像的保存工作卸载给工作人员,将它分叉并添加您自己的调整大小不会太困难。看看https://github.com/gterzian/django_async

【讨论】:

以上是关于将图像传递给 celery 任务的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 1.11 中将 QuerySet 传递给 Celery 任务

Celery 任务调用了 3 次,但提供给任务的数据没有改变

如何在 Django 项目中将请求传递给 Celery 任务参数?

可以将 OrderedDict 作为 Celery 任务参数传递吗?

调用挂在 Heroku 环境中的 celery 任务

使用celery的backend异步获取结果