The usual answer is: in the case of blocking I/O, the thread running send/recv can block while other python code runs.
In practice, this doesn’t work particularly well, as you rarely have massively I/O bound things in Python.
In practice, this doesn’t work particularly well, as you rarely have massively I/O bound things in Python.
Only being able to run a single thread of "logic" basically makes that impossible, as you need to usually do some computation to figure out what bytes to send/receive, do something with the results, and so on.
Citation needed.