Фон немного сложнее. Таким образом, у нас есть (в целях тестирования, может быть больше в производстве) файл .zip размером 1,2 ГБ, который мы разделяем на куски и отправляем через несколько экземпляров Onionshare. Как только получатель получает все чанки, он помещает их в список, называемый контентом. Поскольку каждый блок представляет собой список целых (не уверен, почему onionshare передает как целые числа, а не байты), контент представляет собой список списков целых. Однако, чтобы сохранить его должным образом, нам нужно (насколько я знаю) преобразовать его в список байтов и сохранить, используя b''.join
Вот код, который у нас есть:
#Write total content to image.zip
#content is a list of lists of int, but saved value must be a simple list of bytes
#This is what I came up with to convert it to a list of bytes
content2 = []
for i in range (0, threads):
for j in range(0, len(content[i])):
content2.append(bytes(content[i][j]))
#And now it can be saved with a join
open("image.zip", "wb").write(b''.join(content2))
Я довольно конечно, это должно работать, однако, делая это, мы сталкиваемся с проблемой, когда процесс останавливается из-за использования слишком большого количества памяти. Мы попытались записать файл пошагово, а не все сразу, но возникла та же проблема. Поэтому я думаю, что проблема с памятью происходит во время фактического преобразования. Кто-нибудь может предложить лучший способ сделать это?
Спасибо