Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
Python 如何提高将数据转换为json格式的性能?_Python_Json_Algorithm_Amazon S3 - Fatal编程技术网

Python 如何提高将数据转换为json格式的性能?

Python 如何提高将数据转换为json格式的性能?,python,json,algorithm,amazon-s3,Python,Json,Algorithm,Amazon S3,我有以下代码将数据(postgress中的行数据)转换为json。通常len(数据)=100000 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] ur

我有以下代码将数据(postgress中的行数据)转换为json。通常
len(数据)=100000

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个响应。对此作了简要介绍

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

from multiprocessing.pool import ThreadPool

# ...

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

def convert_to_json(self, data):
    pool = ThreadPool(processes=10)
    urls = [row[0] for row in data]
    video_ids = pool.map(fetch_generate_presigned_url,urls)
    infos = {
        'videos':[{'id': video_id,'location': row[1],'src': row[0]}
                       for vide_id,row in zip(video_ids,data)],
        'total_count': len(data)
    }
    return json.dumps(infos)
从multiprocessing.pool导入线程池
# ...
def fetch_generate_presigned_url(视频\u id):
返回s3.generate\u presigned\u url(
ClientMethod='get_object',
Params={
“Bucket”:“…”,
'Key':'{}.mp4'。格式(视频id)
}
)
def将_转换为_json(自身,数据):
池=线程池(进程=10)
URL=[数据中的行的行[0]
video\u id=pool.map(获取\u生成\u预签名\u url,url)
信息={
'videos':[{'id':video_id,'location':行[1],'src':行[0]}
对于vide_id,zip中的行(video_id,data)],
“总计数”:len(数据)
}
返回json.dumps(infos)

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

我假设大部分时间都浪费在
生成预签名url
上。您可以并行化
生成预签名url
调用。@ashishnitinpail您能提供一些代码吗?@WillemVanOnsem Yes,我觉得这很奇怪,但我的问题代码和你的代码同时工作。@petrush:这几乎是不可能的。你能告诉我CPU的使用情况吗?