【问题标题】:What is the Python equivalent of PHP's set_time_limit()?PHP 的 set_time_limit() 的 Python 等价物是什么?
【发布时间】:2010-01-08 00:08:43
【问题描述】:

我有一个冻结的 python 脚本(我认为它在某处等待套接字数据时停止),但我无法获得回溯,因为停止它的唯一方法是终止进程。有一个超时套接字也可以,但它似乎不起作用。

我希望 Python 有一个像 PHP 的 set_time_limit() 函数这样的功能,它可以停止脚本并给我一个有用的回溯,可能会显示一个被冻结的 sock.recv() 调用,或者某个地方的无限循环。

【问题讨论】:

    标签: php python


    【解决方案1】:

    signal.alarm 可以提供帮助(在 Unix 平台上),但是(取决于平台)可能会有不间断的系统调用(如果我得到正确的文档,在 Unix 上,PHP 的 set_time_limit 不计算系统调用所花费的时间,所以挂起的系统调用也会有问题)。

    【讨论】:

    • 你认为 signal.alarm 会给他他提到的回溯吗?
    • SIGALRM(或任何其他信号)可以由处理函数处理(通过 signal.signal),该处理函数以当前堆栈帧作为第二个参数调用,因此当然是可行的(除其他外) ) 从那里进行堆栈跟踪。
    【解决方案2】:

    您可以改为在套接字上设置超时。

    import socket
    socket.setdefaulttimeout(10) #10 seconds
    

    在你的程序开始时这样做,所有建立套接字连接的东西都应该尊重它。

    【讨论】:

      猜你喜欢
      • 2016-07-03
      • 1970-01-01
      • 2010-09-27
      • 2011-09-03
      • 2011-03-07
      • 2010-09-23
      • 2018-10-24
      • 2017-12-22
      • 2021-11-29
      相关资源
      最近更新 更多