服务器升级后,我遇到了python脚本占用所有服务器连接的问题,因为看起来在超时后它实际上并没有结束循环。代码如下:
if os.name == 'posix':
signal.signal(signal.SIGALRM, self.handle_timeout)
signal.alarm(__TIMEOUT__)
try:
self.inputline = self.rfile.readline()
except IOError:
continue
if os.name == 'posix':
signal.alarm(0)
信号发生,所有这一切都将terminated
变量设置为1并打印有关超时的日志。虽然看起来像while not self.terminated:
。我的猜测是因为它有except IOError:
,但是没有发生,它仍然位于readline()
。所以问题是,确保SIGALRM
将导致continue
结束循环并退出脚本的正确方法是什么?
TIA !!
答案 0 :(得分:1)
在try
中,您可以引发异常以让def handle_timeout(signum, frame):
raise KeyboardInterrupt('received signal to exit')
while not terminated:
try:
self.inputline = self.rfile.readline()
except IOError, KeyboardInterrupt:
terminated = True
continue
醒来。然后在try / except中捕获该异常:
{{1}}