python - 如何提高数据转json格式的性能?

标签 python json algorithm amazon-s3

我有以下代码将数据(来自 postgres 的行数据)转换为 json。通常 len(data) = 100 000

def convert_to_json(self, data):
    s3 = self.session.client('s3')
    infos = {
        'videos':[],
        'total_count': len(data)
    }

    for row in data:
        video_id = row[0]
        url = s3.generate_presigned_url(
            ClientMethod='get_object',
            Params={
                'Bucket': '...',
                'Key': '{}.mp4'.format(video_id)
            }
        )

        dictionary = {
            'id': video_id,
            'location': row[1],
            'src': url
        }
        infos['videos'].append(dictionary)

    return json.dumps(infos)

感谢您的任何想法。

最佳答案

您程序中的大部分时间可能都浪费在了等待网络上。实际上,您调用了 s3.generate_presigned_url,它会向 Amazon 发送请求,然后您必须等待服务器最终响应。与此同时,您无能为力。

因此,最有潜力的方法是通过并行执行请求 来加快处理速度。例如,您发送 10 个请求,然后等待 10 个响应。 This article对此作一简要介绍。

根据您的问题和文章,您可以使用类似以下的方法来加快该过程:

<b>from multiprocessing.pool import ThreadPool</b>

# ...

def <b>fetch_generate_presigned_url(video_id)</b>:
    return s3.generate_presigned_url(
               ClientMethod='get_object',
               Params={
                   'Bucket': '...',
                   'Key': '{}.mp4'.format(<b>video_id</b>)
               }
           )

def convert_to_json(self, data):
    pool = ThreadPool(processes=10)
    urls = <b>[row[0] for row in data]</b>
    video_ids = pool.map(<b>fetch_generate_presigned_url</b>,urls)
    infos = {
        'videos':[{'id': video_id,'location': row[1],'src': row[0]}
                      <b> for vide_id,row in zip(video_ids,data)</b>],
        'total_count': len(data)
    }
    return json.dumps(infos)

进程的数量,process=10可以设置的更高,让请求更并行。

关于python - 如何提高数据转json格式的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42923514/

相关文章:

python - selenium.webdriver.firefox.options - 它是关于什么的?

python - 进程退出后需要刷新文件吗?

python - 如何使用 pandas 中的正则表达式来屏蔽具有某些 nan 值的列?

java - 为什么我在响应 JSON 请求时收到 500 错误?

php - 通过android编辑mysql

c++ - 如何连接几张 map ?

长复杂字符串的Python正则表达式

PHP - 将 Unicode 数据插入正确格式的 MYSQL

python - python3中的高效位交换

c++ - 可选分析代码执行的高效设计