我需要获取用户目录的内容并在请求中发送它们。不幸的是我无法修改我正在提出请求的服务,因此我无法压缩所有文件并发送,我必须发送所有文件。
文件总大小有限制,但文件数量不受限制。不幸的是,一旦我尝试打开太多,Python就会出错:[Errno 24] Too many open files
。这是我目前的代码:
files_to_send = []
files_to_close = []
for file_path in all_files:
file_obj = open(file_path, "rb")
files_to_send.append(("files", (file_path, file_obj)))
files_to_close.append(file_obj)
requests.post(url, files=files_to_send)
for file_to_close in files_to_close:
file_to_close.close()
根据我的情况,有没有办法绕过这个打开的文件限制?
答案 0 :(得分:1)
您可以一次发送一个文件吗?或者也许可以分批发送?您可以在此处增加允许打开文件的数量:
IOError: [Errno 24] Too many open files:
但总的来说这很挑剔,不推荐。
您可以批量发送请求,ala:
BATCH_SIZE = 10 # Just an example batch size
while len(all_files) > 0:
files_to_send = []
while len(files_to_send) < BATCH_SIZE:
files_to_send.append(all_files.pop())
file_obj = open(file_path, "rb")
requests.post(url, files=files_to_send)
for f in files_to_send:
f.close()
这将一次批量发送10个文件。如果一个人一次工作:
for file in all_files:
with open(file, "rb") as outfile:
requests.post(url, files=[outfile])
一次打开太多文件通常是不好的做法。