For UART communication on Raspberry Pi one can write a program in Python with the pyserial package or a program in C. Pyserial requires Threading for non-blocking UART, while C libraries allow to use a single core CPU. Thus for Raspberry pi Zero only C program can achieve the non-blocking UART. Is this correct?
You can easily implement non-blocking UART in Python without threads using
Getter: Get the number of bytes in the input buffer
Just don't read more bytes than
in_waiting tells you are available, and your code will never block.