【问题标题】:Parallel Processing AWS S3 Data in Python在 Python 中并行处理 AWS S3 数据
【发布时间】:2023-04-07 19:42:01
【问题描述】:
我有一个文件列表,我需要通过 lambda 函数从 S3 存储桶访问和处理这些文件,我的想法是遍历每个文件并从所有文件中并行收集数据。我的第一个想法是使用线程,这导致了一个问题,只允许我的最大池大小为 10,而我正在处理许多文件。我希望能够连续追加进程,直到所有文件都被访问,而不是创建进程列表然后并行运行它们,这在多处理池中似乎就是这种情况。如有任何建议,我将不胜感激。
【问题讨论】:
标签:
python
python-3.x
amazon-web-services
amazon-s3
parallel-processing
【解决方案1】:
您可能无法获得性能提升using multi-threading under a single process in python due to the GIL。但是,您可以使用 bash 脚本同时启动多个 python 进程。
例如,如果您想执行一些任务并将结果写入一个公共文件,您可以使用以下 prep.sh 文件来创建一个空的结果文件。
#!/bin/bash
if [ -e results.txt ]
then
rm results.txt
fi
touch results.txt
以及下面的 control.sh 文件来生成您的多个 python 进程。
#!/bin/bash
Arr=( Do Many Things )
for i in "${Arr[@]}"; do
python process.py $i &
done
使用以下 process.py 文件,该文件只接受一个命令行参数并将其写入结果文件,然后是回车。
#!/bin/python
import sys
target = sys.argv[1]
def process(argument):
with open("results.txt", "a") as results:
results.write(argument+"\n")
process(target)
显然,您需要编辑 control.sh 中的数组以反映您需要访问的文件,并在 process.py 中编辑进程以反映这些文件的检索和分析。