Python 如何提高将数据转换为json格式的性能?
我有以下代码将数据(postgress中的行数据)转换为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
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的使用情况吗?