Можно ли использовать hotshot в нескольких потоках? - PullRequest
1 голос
/ 04 марта 2010

У меня есть многопоточная программа, работающая долго, и я хотел бы иногда вызывать функцию с Profile.runcall и выводить данные в файл.

Горячая документация гласит: Note: The hotshot profiler does not yet work well with threads. It is useful to use an unthreaded script to run the profiler over the code you’re interested in measuring if at all possible.

Тем не менее, я тестировал одновременное профилирование функции несколькими потоками, и у меня не возникло проблем. В моем случае профилируемые функции являются автономными и не создают никаких дополнительных потоков во время выполнения. И я удостоверяюсь, что у каждого Profile объекта есть свой собственный файл, чтобы они не забивали друг друга.

Так что я предполагаю, что предупреждение о нескольких потоках означает, что у меня возникнут проблемы, если профилируемая функция сама создаст дополнительные потоки. Когда я профилирую тестовую функцию, которая порождает другие потоки, порожденные потоки не профилируются. Однако это, похоже, не вызывает никаких проблем, поскольку профилируемая функция работает нормально.

Может ли кто-нибудь подтвердить или опровергнуть, что hotshot безопасен для запуска в многопоточной программе? Я не хочу развертывать что-то, что может произойти сбой позже, даже если оно проходит мои первоначальные тесты.

1 Ответ

1 голос
/ 04 марта 2010

Для чего бы то ни было, у нас есть параметр в CubicWeb (который использует несколько потоков), чтобы включить профилирование без необходимости, и до сих пор у меня никогда не возникало проблем при включении профилирования.

...