#python #multithreading #celery
#python #многопоточность #сельдерей
Вопрос:
У меня есть программа, которая разветвляет несколько подпроцессов (если уж на то пошло, она использует Celery Workers). Я пытаюсь выгрузить трассировки стека всех запущенных потоков в каждом процессе. Я использую sys._current_frames()
для получения трассировок стека и threading.enumerate()
для получения имен потоков.
По какой-то причине я заметил, что в моих разветвленных подпроцессах у меня больше «фреймов», чем реальных потоков. Это нормально? Это просто «остатки» от форка? Это ошибка в Python? (для протокола протестировано на Mac OS X)
Спасибо, Z
Ответ №1:
Это ошибка 17094. Это должно быть исправлено в более поздних версиях Python.
Ответ №2:
Ну, документация sys._current_frames сначала немного объясняет кое-что
Эта функция должна использоваться только для внутренних и специализированных целей.
Так что на самом деле это не то, что вам следует использовать. И ключевой ответ приходит из документации threading.enumerate
Список включает демонические потоки, фиктивные объекты потоков, созданные current_thread(), и основной поток.
Комментарии:
1. Я ценю ваш ответ и действительно прочитал документацию. Дело в том, что sys._current_frames упоминается как инструмент для отладки. Я видел много фрагментов кода, которые используют это, и то, что я нашел, просто нарушает большинство из них.