Python использует "реальные" потоки, то есть потоки базовой платформы. В Linux он будет использовать библиотеку pthread (если вам интересно, здесь - реализация ).
Что особенного в потоках Python - это GIL: поток может изменять структуры данных Python, только если он удерживает эту глобальную блокировку. Таким образом, многие операции Python не могут использовать несколько процессорных ядер. Тем не менее, поток с блокирующим сокетом не будет содержать GIL, поэтому он не влияет на другие потоки.
GIL часто неправильно понимают, заставляя людей верить, что потоки в Python почти бесполезны. Единственное, что мешает GIL, - это одновременное выполнение «чистого» кода Python на нескольких процессорных ядрах. Если вы используете потоки, чтобы адаптировать графический интерфейс или запускать другой код во время блокировки ввода-вывода, GIL не повлияет на вас. Если вы используете потоки для запуска кода в каком-либо расширении C, например NumPy / SciPy, одновременно на нескольких процессорных ядрах, GIL также не повлияет на вас.