Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在AWS Lambda(Python)中,使用/tmp/或直接将图像存储在PIL.image中,什么更有效?_Python_Aws Lambda_Python Imaging Library_Tesseract - Fatal编程技术网

在AWS Lambda(Python)中,使用/tmp/或直接将图像存储在PIL.image中,什么更有效?

在AWS Lambda(Python)中,使用/tmp/或直接将图像存储在PIL.image中,什么更有效?,python,aws-lambda,python-imaging-library,tesseract,Python,Aws Lambda,Python Imaging Library,Tesseract,什么是更好的性能?此处事件[“image”]保存base64字符串 1.保存到/tmp/image,然后将其读回 def main(事件、上下文): image=base64.b64解码(事件[“image”]) 文件1=打开(r“/tmp/img”,“wb”) 文件1.写入(图像) file1.close() txt=pytesseract.image\u to\u字符串(“/tmp/img”) 2.直接存储在PIL.Image中 def main(事件、上下文): image=image.

什么是更好的性能?此处事件[“image”]保存base64字符串

1.保存到/tmp/image,然后将其读回
def main(事件、上下文):
image=base64.b64解码(事件[“image”])
文件1=打开(r“/tmp/img”,“wb”)
文件1.写入(图像)
file1.close()
txt=pytesseract.image\u to\u字符串(“/tmp/img”)
2.直接存储在PIL.Image中
def main(事件、上下文):
image=image.open(BytesIO(base64.b64解码(事件[“image”]))
txt=pytesseract.image\u to\u字符串(图像)
我在Lambda控制台中执行了多个测试,发现第一个方法的性能稍好一些

#1= ~2100ms
#2= ~2300ms

如何解释在第一种情况下性能更好?这个分布在生产中的重负载下会发生变化吗?

第一个选项更可取,因为每次调用Lambda都需要您的映像。您可以在启动时将其保存在tmp中,并通过从/tmp读取它来继续使用

第一个使用tesseract提供的JPEG/PNG解码器,第二个使用PIL/Pillow提供的解码器-我猜区别在于此,但在得出任何结论之前,您需要使用JPEG、不同大小和类型的PNG进行测试。您是否检查base64解码与其他解码相比花费了多少时间。。。可能是解码占用了大部分时间,所以数字看起来是一样的。您是否也尝试过使用分配给lambda的内存?这将改变可用的内存和CPU-所以调整这可能也会改变你的数字。嘿,拉杰什-这对你所描述的不起作用。。。每次调用lambda时,它都是一个新实例,这意味着/tmp是空的。您在/tmp中写入的任何内容都将在lambda完成时消失-在调用之间它不会持久化。@richard,很抱歉回复太晚。我面临着同样的问题,但我使用的是java包。我必须设计一个pdf,它要求lambda生成的每个pdf都有徽标。我们把图像作为资源放在罐子里。当Lambda使用这个罐子时,我们可以从/tmp获得它。Lambda不会立即进入冷态。对于多次迭代,您可以利用它。我们的数量很大,所以我决定采用这种方法。希望能有所帮助。