Switched to using ThreadPoolExecutor
This commit is contained in:
parent
4feb1b65d6
commit
77b972a1b2
2 changed files with 8 additions and 7 deletions
|
@ -1,4 +1,5 @@
|
||||||
FROM public.ecr.aws/lambda/python:3.8
|
FROM public.ecr.aws/lambda/python:3.8
|
||||||
|
RUN yum -y update
|
||||||
RUN yum -y install git && yum clean all
|
RUN yum -y install git && yum clean all
|
||||||
RUN yum -y install tar gzip zlib freetype-devel \
|
RUN yum -y install tar gzip zlib freetype-devel \
|
||||||
gcc \
|
gcc \
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
from pickletools import optimize
|
|
||||||
from turtle import down
|
|
||||||
from weakref import finalize
|
|
||||||
from PIL import Image, ImageOps, ImageFilter
|
from PIL import Image, ImageOps, ImageFilter
|
||||||
from requests import get
|
from requests import get
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
import base64
|
import base64
|
||||||
from multiprocessing.pool import ThreadPool
|
import concurrent.futures
|
||||||
from time import time as timer
|
from time import time as timer
|
||||||
|
|
||||||
# find the highest res image in an array of images
|
# find the highest res image in an array of images
|
||||||
|
@ -42,7 +39,9 @@ def scaleImageIterable(args):
|
||||||
|
|
||||||
def scaleAllImagesToSameSize(imageArray,targetWidth,targetHeight,pad=True): # scale all images in the array to the same size, preserving aspect ratio
|
def scaleAllImagesToSameSize(imageArray,targetWidth,targetHeight,pad=True): # scale all images in the array to the same size, preserving aspect ratio
|
||||||
newImageArray = []
|
newImageArray = []
|
||||||
newImageArray=[scaleImageIterable([image,targetWidth,targetHeight,pad]) for image in imageArray]
|
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
|
||||||
|
newImageArray = [executor.submit(scaleImageIterable, (image, targetWidth, targetHeight,pad)) for image in imageArray]
|
||||||
|
newImageArray = [future.result() for future in newImageArray]
|
||||||
return newImageArray
|
return newImageArray
|
||||||
|
|
||||||
def blurImage(image, radius):
|
def blurImage(image, radius):
|
||||||
|
@ -107,7 +106,9 @@ def genImageFromURL(urlArray):
|
||||||
# no cache means that they'll have to be downloaded again if the image is requested again
|
# no cache means that they'll have to be downloaded again if the image is requested again
|
||||||
# TODO: cache?
|
# TODO: cache?
|
||||||
start = timer()
|
start = timer()
|
||||||
imageArray = ThreadPool(8).map(downloadImage,urlArray)
|
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
|
||||||
|
imageArray = [executor.submit(downloadImage, url) for url in urlArray]
|
||||||
|
imageArray = [future.result() for future in imageArray]
|
||||||
print(f"Images downloaded in: {timer() - start}s")
|
print(f"Images downloaded in: {timer() - start}s")
|
||||||
start = timer()
|
start = timer()
|
||||||
finalImg = genImage(imageArray)
|
finalImg = genImage(imageArray)
|
||||||
|
@ -115,7 +116,6 @@ def genImageFromURL(urlArray):
|
||||||
return finalImg
|
return finalImg
|
||||||
|
|
||||||
def lambda_handler(event, context):
|
def lambda_handler(event, context):
|
||||||
# TODO implement
|
|
||||||
images = event["queryStringParameters"].get("imgs","").split(",")
|
images = event["queryStringParameters"].get("imgs","").split(",")
|
||||||
combined = genImageFromURL(images)
|
combined = genImageFromURL(images)
|
||||||
buffered = BytesIO()
|
buffered = BytesIO()
|
||||||
|
|
Loading…
Reference in a new issue