繁体   English   中英

如何提高 S3 Jupyter Notebook (SageMaker Studio) 中 XML 检索和解析的速度?

[英]How do I increase speed of XML retrieval and parsing in S3 Jupyter Notebook (SageMaker Studio)?

我正在管理计算机视觉项目的数据,并且正在寻找一种快速的方法来搜索和操作给定目录中的所有文件。 我有一个可行的解决方案,但每秒只能处理 10-20 个文件。 我是 Jupyter Notebooks 的新手,所以我正在寻找有关提高附加代码效率的建议。

当前代码如下:

car_count=0
label_dict={}
purge_list=[]
for each_src in source_keys:
    pages = paginator.paginate(Bucket=src_bucket, Prefix=each_src)
    for page in pages:
        for obj in page['Contents']:
            fpath = obj['Key']
            fname = fpath.split('/')[-1]
            if fname == '':
                continue
            copy_source = {
                'Bucket': src_bucket,
                'Key': fpath
            }
            if fname.endswith('.xml'):
                obj=s3.Object(src_bucket,fpath)
                data=obj.get()['Body'].read()
                root = ET.fromstring(data)
                for box in root.findall('object'):
                    name=box.find('name').text
                    if name in label_dict:
                        label_dict[name] +=1
                    else :
                        label_dict[name] = 1
                    if name not in allowed_labels:
                        purge_list.append(fpath)
                print(f'Labels: {label_dict}',end='\r')
    print(f'\nTotal Images files:{i}, Total XML files:{j}',end='\r')
#print(f'\nLabels: {label_dict})
print(f'\nPURGE LIST: ({len(purge_list)} files)')

可能的解决方案:

多线程- 我在正常 Python 3.x 中完成了线程处理 笔记本中的多线程是否很常见? 读取更少的文件- 当前读取整个文件,不确定这是否是一个大的停顿点,但可能会提高速度。

Jupyter 通常有很多开销——你的语法也有三个级别的for循环。 在 python 的世界中, for循环越少越好——而且, binary数据几乎总是更快。 所以,一些建议:

  • 重组你的 for 循环,使用来自 pypi 的一些专门的 lib 文件 fs
  • 改变语言? 使用bash脚本
  • 多线程确实是一种方式
  • 缓存,使用redis或其他快速数据结构来“读入”数据
  • golang相对容易从 python 跳转,也有很好的多线程支持 - 我的 2 美分:至少值得一试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM