亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查看使用 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 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號