首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步处理图像(Django)

异步处理图像(Django)
EN

Stack Overflow用户
提问于 2017-06-21 00:46:28
回答 1查看 59关注 0票数 0

在我的一个Django网站上,用户上传照片,其他人对照片进行评论。目前,整个上传过程都是一个阻塞调用。因此,我想把它移到一个芹菜队列中,并异步执行它。为此,我只需从views.py调用以下代码

代码语言:javascript
复制
photo = form.cleaned_data.get('photo',None)
upload_photo.delay(photo, request.user.id)

然后在tasks.py中,我有:

代码语言:javascript
复制
@celery_app1.task(name='tasks.upload_photo')
def upload_photo(photo_obj, user_id):
    photo = Photo.objects.create(image_file = photo_obj, owner_id=user_id)

现在,不出所料,这给了我一个EncodeError: <InMemoryUploadedFile: temp.jpg (image/jpeg)> is not JSON serializable。那么,为了在aysnc任务中完成繁重的任务,应该遵循什么模式呢?一个说明性的例子会很有帮助。

附注:如果这对回答者很重要,我正在寻找一个不涉及JS的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-21 00:56:25

为了解决您的问题,您可以创建自定义的JSON编码器,以供芹菜使用,例如Celery: is there a way to write custom JSON Encoder/Decoder?。但这不是一个好的方法。

但总的来说,它看起来像是错误的解决方案。如果你在任务中做的唯一一件事就是创建对象--在视图中这样做。您只能跳过单个SQL查询。如果媒体存储在远程服务器上,这可能是一种情况,但最好用其他方式实现它(将对象创建分成两部分,等等)。

例如,如果在任务中有一些其他代码来处理图像,最好只将这些代码留在任务中,并在视图中创建对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44658817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档