请考虑以下代码,其中big_file
是无法在内存中的文件的路径。
f = os.open(big_file, os.O_RDONLY)
data = mmap.mmap(f, 0, access=mmap.ACCESS_READ)
此时,data
的行为类似于带有切片表示法或普通文件操作的字符串。但是,我正在编写一个API,希望传入类型bytes
的对象,如果我尝试传递变量data
,则会出现以下错误。
TypeError: expected request_binary as binary type, got <class 'mmap.mmap'>
对于小文件,我不能简单地传入data.read()
甚至完全跳过mmap
,但对于大文件,这会导致MemoryError
。
有没有办法包装或转换mmap
对象,以便API可以将其用作bytes
?
答案 0 :(得分:3)
docstring for the API you're using在右上角说:
请勿使用此功能上传大于150 MB的文件。而是使用
files_upload_session_start
创建上传会话。
假设您的计算机有超过150 MB的可用内存,mmap将无法帮助您。您需要使用他们推荐的API(支持一次发送一件的分块上传)。