Я думаю, что чтение кода CPython будет полезно.
Все необходимые сведения вы найдете в ceval.c
Я также довольно плохо знаком с CPython. Я попытаюсь поделиться своим пониманием.
- основной цикл (запустить навсегда или цикл интерпретации Python начинается в строке 1184, для (;;)
- вы можете попробовать dis module и понять, какPython-код преобразуется в байт-код
- интерпретатор будет принимать байт-код и выполнять один за другим
- как переключается поток? строка 1233-1250, переключается поток
Вы можетепредставьте себе, что как только вы вызовете threading.Thread, байт-код для создания объекта потока и его целевой функции будет добавлен в текущий список инструкций.
Когда интерпретатор обрабатывает этот байт-код, он заметит, что создается новый поток (этошаг, я не совсем уверен. Вы можете проверить ceval.py и модуль потоков для проверки).
Теперь у вас есть два списка байт-кода для использования интерпретатором Python.
Это будет по очереди в соответствиик своим собственным правилам (то есть для каждого потока на 100 инструкций, а затем решить, переключаться ли, обрабатывать специальные сигналы или другие)
Надеюсь, что ответтвои сомнения.
Глубокое понимание и ничего не принимать как должное - это здорово!
Надеюсь, вы хорошо проведете время, изучая cpython.