最佳实践:使用python请求将多个文件发送到其他端点

时间:2019-02-25 15:03:01

标签: python rest post python-requests

通过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, ...

但是这很慢:这样做的最佳实践是什么?谢谢。

2 个答案:

答案 0 :(得分:1)

第一种方法:

我不知道这是否是最佳实践,您可以将文件拆分为1000批,然后压缩并使用线程将其发送为后期请求(设置线程数=处理器核心数)

(其余端点可以提取压缩的内容然后进行处理)

第二种方法:

批量压缩文件并批量传输 传输完成后,在服务器端进行验证 然后一口气开始数据库上传。

答案 1 :(得分:1)

您要做的第一件事是准确确定脚本的哪一部分是瓶颈。您在这里同时拥有磁盘和网络I / O(分别读取文件和发送HTTP请求)。

假设HTTP请求是实际的瓶颈(很有可能),请考虑使用aiohttp代替请求。这些文档提供了一些很好的示例来帮助您入门,并且这里有很多“快速入门”文章。这将允许您的网络请求进行协作,这意味着当您的网络请求之一正在等待时,其他python代码可以运行。只是要注意不要淹没正在接收请求的任何服务器。