为了账号安全,请及时绑定邮箱和手机立即绑定

查看使用 Heroku 和 S3 处理图像花费了太多时间

查看使用 Heroku 和 S3 处理图像花费了太多时间

慕妹3146593 2022-06-28 10:36:46
我在 Heroku 中运行一个 Django 应用程序,它处理来自用户的多个图像上传并将它们存储到 Amazon S3。问题是这个过程的执行通常需要30s以上(Heroku的时间执行限制)。我对其进行了测试,需要较长时间的行是将图像文件保存在 ImageField 中的行。这样做是因为必须通过 ProcessImageFile() 裁剪和处理图像。不过这个功能用的时间不是很长,而是保存方法本身,可能是因为它在保存文件的同时将文件一个一个地存储在S3中。这是视图(省略了不相关的行):    @login_required    def image_create(request):        if request.method == 'POST':            images = request.FILES.getlist("files")            crop_points = json.loads( request.POST.get('crop_points'))            #Validation of inputs in the form: images and other fields            if len(images) < 3 : return JsonResponse({'val_result': 'min_error'})            if len(images) > 12: return JsonResponse({'val_result': 'max_error'})            #We Create the gallery, iterate over the images provided by the form, validate, insert custom fields and save them in bulk associating it to the gallery.            with transaction.atomic():                            new_items = []                    gallery = Gallery.objects.create( user=request.user )                for i, img_file in enumerate(images):                    new_item = Image()                    new_item.user = request.user                            #-----THIS IS THE PART WHICH TAKES MOST OF THE VIEW PROCESSING TIME: IT IS NOT THE ProcessImageFile FUNCTION, BUT THE SAVE METHOD ITSELF                    new_item.image.save( 'img'+ str(i) + '.jpg', content = ProcessImageFile(img_file, crop_points), save=False   )我已经尝试使用 Celery 在单独的任务中处理文件上传,但这里的问题是将请求或图像文件传递给任务,因为它们必须被序列化。无论如何,我想这里有一些效率低下的地方,这个简单的视图不应该花费超过 30 秒的时间在 S3 中上传五张图像并返回响应。也许解决方案是将所有图像一起批量发送到 S3,或者以其他方式保存它们,我不知道。
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

我认为你必须像这样前进:

  • 首先,将任何类型的文件保存images到本地目录中。

  • 之后,您可以将此文件上传或传输到其他地方,该位置可以是远程存储位置,例如S3使用Celery

这是一个开源应用程序,它正在执行您真正寻找的确切任务;

访问参考:django-queued-storage

安装和使用也非常简单明了:

pip install django-queued-storage


查看完整回答
反对 回复 2022-06-28
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号