python 2.7.8
def file_by_block(file, begin, end):
with open(file, 'rb') as fp:
fp.seek(begin) #寻找文件中某个给定的位置
lenthofdata = end - begin #希望读取的大小
data = fp.read(lenthofdata)
with open('C:\\Users\\Administrator\\Desktop\\TEMP\\b.text', 'ab+') as fd:
fd.writelines(data)
无论用writelines还是write,用'a','ab','ab+',总是不能把data完整的写入到fd中。求高人指点,先谢!
多线程调用上面读取写入的部分:
def process_pid(pid, array, file, rlock):
'''
多个动作pid同时开动。
'''
FILE_SIZE = getFilesize(file)
while 1:
rlock.acquire()
begin = max(array)
end = array[pid] = (begin + BLOCKSIZE) if (begin + BLOCKSIZE) < FILE_SIZE else FILE_SIZE
rlock.release()
if begin == FILE_SIZE:
break
elif end < FILE_SIZE:
file_by_range(file, begin, end,pid)
elif end == FILE_SIZE:
file_by_range(file, begin, end,pid)
else:
break
def main():
file = "C:\\Users\\Administrator\\Desktop\\a.mkv"
FILE_SIZE = getFilesize(file)
rlock = RLock()
array = Array('l', WORKERS, lock=rlock)
threads = []
for i in range(WORKERS):
p = Process(target=process_pid(), args=[i, array, file, rlock])
threads.append(p)
for i in range(WORKERS):
threads[i].start()
for i in range(WORKERS):
threads[i].join()
print 'in main :', datetime.datetime.now().strftime("%Y-%d-%m %H:%M:%S")
if __name__ == '__main__':
main()