出于教育目的,我想创建文件块上传。你们怎么知道什么时候全部块都上传了?
我尝试从中移出块temp
并重命名它们,以便它们以正确的顺序排列,然后与最后一块合并在一起。但是,我想发送的最后一块不是收到的最后一块。因此fopen()
,由于尚未创建块,因此块上失败了,我得到的最终文件的大小恰好是最后一个块的大小。
我相信我可以使用.onload
on事件逐个发送块xhr
,这样我什至不必将它们从PHP temp移走,但是我想知道是否有不同的解决方案。
一些基本的代码可以取悦您:
function upload(file) {
var BYTES_PER_CHUNK = parseInt(2097152, 10),
size = file.size,
NUM_CHUNKS = Math.max(Math.ceil(SIZE / BYTES_PER_CHUNK), 1),
start = 0, end = BYTES_PER_CHUNK, num = 1;
var chunkUpload = function(blob) {
var fd = new FormData();
var xhr = new XMLHttpRequest();
fd.append('upload', blob, file.name);
fd.append('num', num);
fd.append('num_chunks', NUM_CHUNKS);
xhr.open('POST', '/somedir/upload.php', true);
xhr.send(fd);
}
while (start < size) {
chunkUpload(file.slice(start, end));
start = end;
end = start + …
Run Code Online (Sandbox Code Playgroud) 我正在处理相当大的时间序列数据集,准备好的SequenceExample
s 然后写入TFRecord
. 这会产生一个相当大的文件(超过 100GB),但我希望将其存储在块中。我试过了:
file = '/path/to/tf_record_0.tfrecords'
file_index = 0
for record in dataset:
# fill the time series window, prepare the sequence_example, etc.
if os.path.exists(file) and os.path.getsize(file) > 123456789:
file = file.replace(str(file_index), str(file_index + 1))
file_index += 1
with tf.io.TFRecordWriter(file) as writer:
writer.write(sequence_example.SerializeToString())
Run Code Online (Sandbox Code Playgroud)
...但是由于TFRecordWriter
打开像Python这样的文件,open(file, mode='w')
它每次进入with
块时都会覆盖自己(除了它是非常丑陋的解决方案),并且从我读到的内容来看,没有办法改变这种行为。更改file
内部with
块的路径显然会引发错误。
所以我的问题是,有没有办法TFRecord
在循环和处理我的数据集时当前达到一定大小时创建下一个文件?TFRecord
当我不处理除了系统内存不足之外的任何类型的瓶颈时,拥有较小的文件是否有好处?如果我是正确的,Tensorflow 可以毫无问题地从磁盘读取它(尽管可能还有其他原因,人们更喜欢拥有多个文件)。
我能想到的一件事是在list
准备保存的序列中创建某种缓冲区,并在TFRecord
该缓冲区达到某个阈值时创建/保存。