尝试使用多处理从 s3 读取图像时遇到问题

Posted

技术标签:

【中文标题】尝试使用多处理从 s3 读取图像时遇到问题【英文标题】:Facing issues while trying to read images from s3 with multiprocessing 【发布时间】:2021-11-23 21:39:22 【问题描述】:

多处理的新手,我的数据框中有图像名称,存储在 s3 中,我正在尝试读取这些图像并将它们转换为具有多处理的数组。但是出现错误。数据框如下表所示。

image1 image2
img1.jpg img1.jpg
img3.jpg img4.jpg

我希望将此数据框转换为如下所示的图像数组。

image1 image2 array_1 array_2
img1.jpg img2.jpg array of img1 array of img2
img3.jpg img4.jpg array of img3 array of img4

我正在尝试使用多处理来执行此操作,但运行时错误为 -

RuntimeError: 这个类不是 fork-safe

下面是代码。

def img_array(image):
  '''read single image from s3 and convert to array.'''
  with fs.open(f's3://bucket_name/folder_to_imagesimage' as f:
      open_image=Image.open(f)
      open_image.resize((224,224))
      img_arr=image.img_to_array(open_image)
  return img_arr

 def add_to_df(n):
  '''returns array for each of both images passes by Pool.'''
   array_1 = img_array(n[0])
   array_2 = img_array(n[0])
   return array_1, array_2

 P=Pool()
 result=P.map(add_to_df,df.values)
 P.close()
 P.join()

请帮助我了解如何在多处理中从 s3 读取图像。

【问题讨论】:

【参考方案1】:

尝试在P=Pool()部分使用if __name__ == "__main__":

在pythondocs的安全导入主模块部分中:

确保主模块可以被新的 Python 安全导入 解释器而不会引起意外的副作用(例如 新流程)。

例如,使用 spawn 或 forkserver 启动方法运行 以下模块将因 RuntimeError 失败:

...

应该使用if __name__ == '__main__':保护程序的“入口点”

【讨论】:

以上是关于尝试使用多处理从 s3 读取图像时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

VHDL textio,从文件中读取图像

Django:如何从颤动中读取使用 Dio 发送的图像

清空队列时遇到问题

使用java从sql数据库读取数据时遇到问题

将图像从库上传到s3存储桶 - 创建文件对象?

尝试使用完成处理程序从 google firebase 获取数据时遇到问题