python-2.7 - Python 2.7 mmap http 运行后问题:TypeError:read() 恰好采用 1 个参数(给定 0)
问题描述
使用带有 mmap 的 python 2.7 执行 http 上传,遇到运行时异常:
fdata = fp.read()
TypeError: read() takes exactly 1 argument (0 given)
这是代码:
import requests
dcs_session = requests.Session()
with open(filename, 'rb') as f:
with contextlib.closing(mmap.mmap(f.fileno(), 0,
access=mmap.ACCESS_READ)) as mmap_obj:
resp = dcs_session.post(url, headers=additional_headers,
data=form_data,files={'file': mmap_obj}, timeout=1000, verify=verify_arg)
这是例外:
fdata = fp.read()
TypeError: read() takes exactly 1 argument (0 given)
ERROR (/usr/bin/dca.py:563 : dcs_push Stack trace - Traceback (most recent call last):
File "/usr/bin/dca.py", line 540, in dcs_push
verify=verify_arg)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 555, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 494, in request
prep = self.prepare_request(req)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 437, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "/usr/lib/python2.7/site-packages/requests/models.py", line 308, in prepare
self.prepare_body(data, files, json)
File "/usr/lib/python2.7/site-packages/requests/models.py", line 496, in prepare_body
(body, content_type) = self._encode_files(files, data)
File "/usr/lib/python2.7/site-packages/requests/models.py", line 159, in _encode_files
fdata = fp.read()
TypeError: read() takes exactly 1 argument (0 given)
解决方案
mmap
的read
方法要求您在 Python 3.3 之前传递一个参数。它不是文件对象的直接替换,即使它是,使用它也没有任何好处,因为该read
方法无论如何都会制作副本,因此您不会避免任何分配的内存使用。只需传递文件对象而不是mmap
ing 它,或者升级到现代 Python(Python 2 已经失去支持一年多了;停止在其中编写新代码)。
推荐阅读
- r - 根据另一列的值将一列相加
- ios - 如何确保不相对于相机移动 SCN 节点
- java - 在 javafx 中更新/编辑图像的有效方法
- angular - Angular CLI 使用配置与 E2E 测试
- xml - 在单行中显示属性@id、@name、@parent
- mongoose - mongoose 在 pre('update') 上更改更新不适用于验证
- java - 为什么 out.println 尽可能短?
- sql-server - 由于在另一个数据库中调用用户定义函数而导致性能损失
- mysql - 使用 Terraform 创建 AWS MySQL RDS 实例时出错
- angular - 滚动角载荷数据 [For 循环]