The GIL comments are correct, but this code is more likely to be related to IOs than to CPU bindings.
Even if you used something like C or Java, you are still reading files through the serial interface, so if you cannot handle 100-300 MB / s JSON, you will not see the performance benefits of streaming.
@DevShark said that you will see an advantage for IO-bound processes, but it's harder than that. This is usually more for simultaneous high latency network connections. In this case, you should be bound to the IO on the disk, and not to the process (you do not expect a response to the remote response), so parallelism will not help.
If you are attached to a processor, have real threads and use a spinning disk, you still need to carefully adjust the buffer sizes. A search time of 10 ms can kill you, so you need to use buffered reads with buffer sizes much larger than this if you want high disk bandwidth. With a 100 MB / s disk with a 10 ms search time, I would use 10 MB buffers, but that still means that you spend 10% of your time on the disk. I would also coordinate my readings, so only one reader reads.
source share