作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我使用 requests
模块通过一个请求上传至少 400 个文件时,我在 macOS 系统上遇到了 Too many open files
错误。
我试过 ulimit -n 20000
。
还检查了:
sysctl kern.maxfiles
得到 98304
sysctl kern.maxfilesperproc
得到 49152
然而,它并没有奏效。
这是我的代码:
import os
import requests
url = 'http://127.0.0.1:8000/api/upload'
file_path = '/Users/BonJu/Projects/downloads'
file_list = os.listdir(file_path)
files = []
for file in file_list:
try:
source = open(os.path.join(file_path, file), 'rb')
files.append(('file', source))
except Exception as e:
print('File: %s, Error: %s' % (file, e.__str__()))
continue
response = requests.post(url=url, data={'uploader': 'admin'}, files=files)
最终结果:
File: test_252.docx, Error: [Errno 24] Too many open files: '/Users/BonJu/Projects/downloads/test_252.docx'
File: test_253.docx, Error: [Errno 24] Too many open files: '/Users/BonJu/Projects/downloads/test_253.docx'
File: test_254.docx, Error: [Errno 24] Too many open files: '/Users/BonJu/Projects/downloads/test_254.docx'
...
File: test_418.docx, Error: [Errno 24] Too many open files: '/Users/BonJu/Projects/downloads/test_418.docx'
因为它是一个将发送的日志文件链接到问题的 API 服务器,所以我需要在一个请求中发送所有文件,否则经理将收到多封邮件并且无法解决问题。
这种情况有什么解决办法吗?
我最终调整了我的 API 来保存一个临时文件来存储上传日志,并传递一个 status
参数来控制最终输出。
我的代码:
payload = {
'status': 'finish',
'uploader': 'admin'
}
response = requests.post(url=url, data=payload, files=files)
应用程序接口(interface):
@api_view(['post'])
def upload(request, debug, api_version):
status = request.POST.get('status')
file_list = request.FILES.getlist('file')
if status == 'finish':
# open the temp file and insert the last logs then output
else:
# create/insert the logs and save to a temp file
return Response({'status': status, 'files': file_list})
最佳答案
我建议从所有这些文件中创建一个 tar
文件。
或在读取文件内容后关闭文件(而不是在您发布请求之前让文件描述符保持打开状态
关于python - 如何使用 Python 请求模块上传一堆文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62870862/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!