請花幾點時間幫助我。如何使用與wfile尋求:Python尋求wfile像打開?
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
我以爲wfile和open是一樣的,但爲什麼我不能像open一樣尋求?即使這是真的,我仍然認爲有一種方法可以繞過這個限制。
注意:如果您至少有一次聽說過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
什麼是self.connection? 'wfile'只是某個人(你?)給出的'self'的名稱,因此它被稱爲'self.wfile'。 –
嗨! self.connection.makefile來自SocketServer,這段代碼將創建一個虛擬文件,它是wfile。 https://docs.python.org/3/library/socket.html#socket.socket.makefile – user3763937
**你**在你自己的代碼中調用'wfile'。 –