2012-03-30 23 views
2

我註冊用於遠程調試的信號:什麼可以使signal.signal塊很長一段時間?

signal.signal(signal.SIGUSR1,拉姆達X,Y:remote_debug(X,Y,EMP_ID))

雖然通常非常快,日誌報表顯示這命令(寄存器)有時需要5到10秒才能執行。這是什麼造成的?我該如何解決它?

+0

你在程序中使用線程嗎? – 2012-03-30 06:52:25

+0

處理程序註冊時無線程 – UsAaR33 2012-03-30 10:22:11

+0

什麼平臺?如果Linux嘗試運行'strace python myscript.py'並研究輸出。 – wberry 2012-03-30 20:01:24

回答

0

Python回調代碼實際上並沒有在Python中立即調用。 Python中的C代碼只是在獲取信號時設置一個標誌。它只在處理程序返回解釋器時才運行該處理程序。如果您的代碼路徑當前正在編譯代碼中的擴展模塊中運行,那麼處理程序將不會運行直到它完成。

修復它的唯一方法是確保執行路徑不會在C函數中花費大量時間。你那時正在運行什麼功能?另一個罪魁禍首是標準的time.sleep()方法。請改用signal.pause()。

+0

對不起,這個命令可能一直不清楚。我不是在問回調時間。運行signal.signal(..)到*寄存器*信號處理程序需要5-10秒。 – UsAaR33 2012-03-30 10:22:55

相關問題