В версии 3+ если поток один, то ничего не перещелкивается (в отличие от 2.х).
На работу потока выделяется определенное время после чего управление передается другому потоку. Поток может прерваться только отрабтав байткод (не в середние), но это может быть середина питон кода, т.е. прерывается в любом месте. Если код - расширение на C, то оно часто не учасвтует в захвате GIL и может работать параллельно без блокировок, т.е. блокируется только питон код, а расширения работают в потоках без блокировок.