【发布时间】:2010-01-08 00:08:43
【问题描述】:
我有一个冻结的 python 脚本(我认为它在某处等待套接字数据时停止),但我无法获得回溯,因为停止它的唯一方法是终止进程。有一个超时套接字也可以,但它似乎不起作用。
我希望 Python 有一个像 PHP 的 set_time_limit() 函数这样的功能,它可以停止脚本并给我一个有用的回溯,可能会显示一个被冻结的 sock.recv() 调用,或者某个地方的无限循环。
【问题讨论】:
我有一个冻结的 python 脚本(我认为它在某处等待套接字数据时停止),但我无法获得回溯,因为停止它的唯一方法是终止进程。有一个超时套接字也可以,但它似乎不起作用。
我希望 Python 有一个像 PHP 的 set_time_limit() 函数这样的功能,它可以停止脚本并给我一个有用的回溯,可能会显示一个被冻结的 sock.recv() 调用,或者某个地方的无限循环。
【问题讨论】:
signal.alarm 可以提供帮助(在 Unix 平台上),但是(取决于平台)可能会有不间断的系统调用(如果我得到正确的文档,在 Unix 上,PHP 的 set_time_limit 不计算系统调用所花费的时间,所以挂起的系统调用也会有问题)。
【讨论】:
您可以改为在套接字上设置超时。
import socket
socket.setdefaulttimeout(10) #10 seconds
在你的程序开始时这样做,所有建立套接字连接的东西都应该尊重它。
【讨论】: