Stackless Python - время выполнения профиля одного тасклета
На моем сервере, написанном на Stackless Python, я иногда получаю большие всплески загрузки процессора в течение 5-10 секунд. Это случается время от времени, поэтому у меня возникают проблемы с поиском.
Я использовал cProfile, чтобы попытаться определить, откуда поступают эти всплески, но cProfile дает общую картину того, где время расходуется на каждую функцию. Что я действительно хотел бы знать, так это то, происходят ли пики ЦП из-за некоторой обработки, происходящей в одном тасклете (и останавливают другие тасклеты), или если есть много тасклетов, выполняющих большую обработку (т. Е. Когда каждый становится активным, каждый делает много работы).
Есть ли удобный способ подключиться к планировщику в Stackless Python, чтобы я мог добавить код синхронизации? Другими словами, есть ли функция, которая вызывается, когда тасклет становится активным и когда он становится неактивным, к которому я могу подключиться?
1 ответ
Я не нашел явной функции, в которую можно было бы зацепиться, когда тасклет блокирует / возобновляет работу, но так как Channel.receive() обычно имеет место, когда происходит блокировка / возобновление, я подключился к каждому случаю этого события.