请你抽出几次帮助我。如何在wfile中使用seek:
self.wfile = self.connection.makefile('wb', self.wbufsize)
我的代码如下:
self.wfile.seek(offset, 0)
self.wfile.write(r.data)
但问题是,每当我尝试运行代码时,我的ILDE都会显示此错误:
self.wfile.seek(offset, 0)
io.UnsupportedOperation: seek
注意:如果您至少有一次听说过http.server或BaseHTTPServer,您可能会理解wfile是什么。
编辑:我编辑我的帖子来添加我的代码,只是我的完整软件的一部分,但其他部分并不是真的需要:
self.send_response(200)
self.end_headers()
def accelerator(url=None, splitBy=3):
def buildRange(url, numsplits):
global globaldownloadersave
value = int(self.pool.urlopen('HEAD', url).headers["content-length"])
print("Fullsize: ", value)
print("Try devide with :", value / numsplits)
lst = []
for i in range(numsplits):
if i == range(numsplits):
lst.append('%s-%s' % (i * value//numsplits + 1, i * value//numsplits + 1 + (value - (i * value//numsplits + 1))))
if i == 0:
lst.append('%s-%s' % (0, value//numsplits))
else:
lst.append('%s-%s' % (i * value//numsplits + 1, (i + 1) * value//numsplits))
return lst
def downloadChunk(idx, irange):
global globaldownloadersave
r = self.pool.urlopen('GET', url, headers={'Range': 'bytes=' + str(irange)})
offset = int(re.sub("(^.*?)-(.*?)$", "\\1", irange))
offset2 = int(re.sub("(^.*?)-(.*?)$", "\\2", irange))
self.wfile.seek(offset, 0)
self.wfile.write(r.data)
#self.data = io.BytesIO(b'')
ranges = buildRange(url, splitBy)
tasks = []
# create one downloading thread per chunk
#q = queue.Queue() big fail, so comment it
downloaders = [
threading.Thread(
target=downloadChunk,
args=(idx, irange),
)
for idx,irange in enumerate(ranges)
]
# start threads, let run in parallel, wait for all to finish
for th in downloaders:
th.start()
for th in downloaders:
th.join()
accelerator(self.url, 4)
self.close_connection = 1
return
答案 0 :(得分:0)
套接字连接是一个流。从流中读取的字节消失了。所以seek
毫无意义。虽然可以将所有读取字节保留在内存中并模拟seek
,但这通常不是首选。尝试编写代码而无需seek
。