2012-03-30 1 views
2

Я регистрируя сигнал для удаленной отладки:Что может сделать signal.signal блок в течение длительного времени?

signal.signal (signal.SIGUSR1, лямбда х, у: remote_debug (х, у, emp_id))

Хотя обычно очень быстро, бревенчатые заявления показывают это Команда (регистр) иногда занимает 5-10 секунд для выполнения. Чем это вызвано? Как я могу это исправить?

+0

Вы используете темы в своей программе? –

+0

no threading при регистрации обработчика – UsAaR33

+0

Какая платформа? Если Linux попытается запустить 'strace python myscript.py' и изучить выход. – wberry

ответ

0

Код обратного вызова Python на самом деле не называется сразу в Python. Код C в Python просто устанавливает флаг, когда он получает сигнал. Он запускает обработчик только тогда, когда он возвращается к интерпретатору. Если ваш кодовый путь в настоящее время работает в модуле расширения в скомпилированном коде, обработчик не будет запущен до его завершения.

Единственный способ исправить это, чтобы гарантировать, что путь выполнения не тратит много времени на функцию C. Какую функцию вы выполняете в то время? Другим виновником является стандартный метод time.sleep(). Вместо этого используйте signal.pause().

+0

Жаль, что эта команда, возможно, была неясной. Я не спрашиваю о времени обратного вызова. Запуск signal.signal (..) в * register * обработчик сигнала занимает 5-10 секунд. – UsAaR33

Смежные вопросы