通过Python向REST端点发送大量POST请求的最佳方法是什么? 例如。我想将〜500k个文件上传到数据库。
到目前为止,我所做的是一个循环,该循环使用请求包为每个文件创建一个新请求。
# get list of files
files = [f for f in listdir(folder_name)]
# loop through the list
for file_name in files:
try:
# open file and get content
with open(folder_name + "\\" + file_name, "r") as file:
f = file.read()
# create request
req = make_request(url, f)
# error handling, logging, ...
但是这很慢:这样做的最佳实践是什么?谢谢。
答案 0 :(得分:1)
我不知道这是否是最佳实践,您可以将文件拆分为1000批,然后压缩并使用线程将其发送为后期请求(设置线程数=处理器核心数)
(其余端点可以提取压缩的内容然后进行处理)
批量压缩文件并批量传输 传输完成后,在服务器端进行验证 然后一口气开始数据库上传。
答案 1 :(得分:1)
您要做的第一件事是准确确定脚本的哪一部分是瓶颈。您在这里同时拥有磁盘和网络I / O(分别读取文件和发送HTTP请求)。
假设HTTP请求是实际的瓶颈(很有可能),请考虑使用aiohttp代替请求。这些文档提供了一些很好的示例来帮助您入门,并且这里有很多“快速入门”文章。这将允许您的网络请求进行协作,这意味着当您的网络请求之一正在等待时,其他python代码可以运行。只是要注意不要淹没正在接收请求的任何服务器。