Как записать файловый чанк на диск, как только поток заполнит диапазон байтов

Продолжаем с этого: https://codereview.stackexchange.com/questions/56222/split-download-file-buffer-by-any-number-of-threads/56229

Я обнаружил, что хранение байтов данных в списке может быть дорогостоящим и может снизить производительность системы, поэтому я думаю, что лучше записать данные на диск, как только будет завершен диапазон этого потока, и поэтому остальная часть завершения чанка должна записать кусок диапазона, идущий от следующего потока, заканчивающегося в очереди..

def main(url=None, splitBy=6):
    start_time = time.time()
    if not url:
        print "Please Enter some url to begin download."
        return

    fileName = url.split('/')[-1]
    sizeInBytes = requests.head(url, headers={'Accept-Encoding': 'identity'}).headers.get('content-length', None)
    print "%s bytes to download." % sizeInBytes
    if not sizeInBytes:
        print "Size cannot be determined."
        return
    threads = []
    lock = threading.Lock()

    byteRanges = buildRange(int(sizeInBytes), splitBy)
    for idx in range(splitBy):
        bufTh = SplitBufferThread(url, byteRanges[idx])
        bufTh.daemon = True
        bufTh.start()
        threads.append(bufTh)

    print "--- %s seconds ---" % str(time.time() - start_time)

    with open(fileName, 'w+') as fh:
        for t in threads:
            t.join()
            fh.write(t.data)
        fh.flush()

    print "Finished Writing file %s" % fileName

if __name__ == '__main__':
    main(url)

Итак, как записать файл chunk на диск, как только диапазон байтов будет заполнен потоком?

0 ответов

Другие вопросы по тегам