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

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

【问题讨论】:

    标签: django django-models celery


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】: