gpt4 book ai didi

python - Python请求post的进度

转载 作者:太空狗 更新时间:2023-10-29 17:37:14 25 4
gpt4 key购买 nike

我正在使用 Python 请求包上传一个大文件,但我找不到任何方法来返回有关上传进度的数据。我见过许多用于下载文件的进度表,但这些不适用于文件上传。

理想的解决方案是某种回调方法,例如:

def progress(percent):
print percent
r = requests.post(URL, files={'f':hugeFileHandle}, callback=progress)

在此先感谢您的帮助:)

最佳答案

请求 doesn't support upload streaming例如:

import os
import sys
import requests # pip install requests

class upload_in_chunks(object):
def __init__(self, filename, chunksize=1 << 13):
self.filename = filename
self.chunksize = chunksize
self.totalsize = os.path.getsize(filename)
self.readsofar = 0

def __iter__(self):
with open(self.filename, 'rb') as file:
while True:
data = file.read(self.chunksize)
if not data:
sys.stderr.write("\n")
break
self.readsofar += len(data)
percent = self.readsofar * 1e2 / self.totalsize
sys.stderr.write("\r{percent:3.0f}%".format(percent=percent))
yield data

def __len__(self):
return self.totalsize

# XXX fails
r = requests.post("http://httpbin.org/post",
data=upload_in_chunks(__file__, chunksize=10))

顺便说一句,如果您不需要报告进度; you could use memory-mapped file to upload large file .

要解决这个问题,您可以创建一个类似于来自 urllib2 POST progress monitoring :

class IterableToFileAdapter(object):
def __init__(self, iterable):
self.iterator = iter(iterable)
self.length = len(iterable)

def read(self, size=-1): # TBD: add buffer for `len(data) > size` case
return next(self.iterator, b'')

def __len__(self):
return self.length

例子

it = upload_in_chunks(__file__, 10)
r = requests.post("http://httpbin.org/post", data=IterableToFileAdapter(it))

# pretty print
import json
json.dump(r.json, sys.stdout, indent=4, ensure_ascii=False)

关于python - Python请求post的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13909900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com