Actually, wrapping around out_channel is possible, with a little bit of care: use a Buffer.t to accumulate bytes, and flush right after writing the contents of the Buffer.t to the out_channel. The out_channel will sometimes be flushed more than once in this operation but it doesn't matter.
Application: receive printable data from parallel workers and print each line uninterrupted.
We need to read all the data available from each worker so they don't get stuck in the middle of a long line but only print the data one whole line at a time.