什么是在Python中尝试/除了超时的正确方法

时间:2018-03-19 17:08:14

标签: python

服务器升级后,我遇到了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 !!

1 个答案:

答案 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}}