#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-й поток является основным потоком, а три других порождены из этого основного.