Have you considered reading from the serial interface in a separate thread that works before to send a command to uC to send data?
This will remove some delay after the write command and start reading. There are other SO users who have succeeded in this method, provided that they did not have a buffer overflow.
If this is unclear, let me know and I can put something together to show it.
EDIT
Thinking about it a bit more, if you try to read from the buffer and write it to the file system, even a stand-alone stream may not save you. To minimize processing time, you can consider reading 100 bytes at a time serial.Read(size=100) and pushing this data into the queue to process all of this after the transfer is complete
Pseudocode Example
def thread_main_loop(myserialobj, data_queue): data_queue.put_no_wait(myserialobj.Read(size=100)) def process_queue_when_done(data_queue): while(1): if len(data_queue) > 0: poped_data = data_queue.get_no_wait()
source share