Large delays in code when using Serial.print, etc.

I don't believe that Python is incapable of reading data quickly enough - the processor in a PC is 1000 (?) times faster than the Arduino. Of course your particular Python program may not be written to get the best throughput.

If you need to break up the Arduino transmissions into smaller chunks I suggest you send (say) 60 bytes and then wait for an acknowledgment from the PC before sending the next part. In reality, however, this will just slow things down compared to what could be achieved with a suitable Python program.

I know very little about Python - I use JRuby - and I wonder if it has the concept of background Threads. I use a Thread in JRuby to read and transmit data via the serial port independently of the running of the main user-facing program.

...R