Почему мои потоки спят, когда я специально заставляю их работать

#python-3.x #python-multithreading

#python-3.x #python-многопоточность

Вопрос:

Я учусь обрабатывать один из своих скриптов, и у меня есть вопрос. У меня есть три класса, которые делают свое дело:

 class odd(object):
    def count():
        num = 1
        while True:
            num  = 2

class even(object):
    def count():
        num = 0
        while True:
            num  = 2

class singles(object):
    def count():
        num = 0
        while True:
            num  =1
  

И мой основной запускает три потока:

 if __name__ == '__main__':

    print('Starting...')
    t1 = Thread(name='thread1', target=even.count)
    t2 = Thread(name='thread2', target=odd.count)
    t3 = Thread(name='thread3', target=singles.count)

    t1.start()
    t2.start()
    t3.start()
    while True:
       pass
  

Однако, когда я делаю top -H -p <pid> для просмотра потоков, порожденных моим процессом python, я вижу всего 4 потока, 1 запущенный и 3 спящих. Я ожидал увидеть всего 3 потока и 3 запущенных. Может кто-нибудь объяснить мне, что происходит? Откуда берется 4-й поток? Почему не все мои потоки запущены?

Комментарии:

1. Я не могу воспроизвести. Я запускаю ваш код и запускаю 3 потока. Вы всегда можете проверить, что они выполняются с печатями и спящими режимами.

2. найден ответ на мои вопросы. CPython имеет глобальную блокировку, которая удерживается каждым потоком. Это объясняет, почему большинство моих потоков спят. 4-й поток является основным потоком, а три других порождены из этого основного.