限制Python中函数调用的执行时间会导致我的内核崩溃

时间:2016-07-13 15:08:22

标签: python signals spyder

我需要在不同的输入上多次应用一个函数。有时该功能需要数小时才能运行。我不希望它持续超过10秒。我在之前的帖子(How to limit execution time of a function call in Python)上找到了该方法。我可以使用它但是一旦它完成我的内核就会死掉(意外)。你会发现一个例子。

有人面对这个问题/知道它为什么会发生吗?

Fyk:我在达尔文上使用spider(Python 2.7.11 64bits,Qt 4.8.7,PyQt4(API v2)4.11.4)

import signal
import time


def signal_handler(signum, frame):
    raise Exception("Timed out!")

for i in range(10):
    signal.signal(signal.SIGALRM, signal_handler)
    signal.alarm(10)   # Ten seconds
    try:
        time.sleep(0.2) #  The function I want to apply
        print("Ok it works")
    except Exception, msg:
        print "Timed out!"

1 个答案:

答案 0 :(得分:1)

您正在使用SIGALRM处理程序创建10个信号,这意味着您现在有10个例外同时发生。您可能想尝试:

signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(10)   # Ten seconds

for i in range(10):
    try:
        time.sleep(0.2) #  The function I want to apply
        print("Ok it works")
    except Exception, msg:
        print "Timed out!"
        break

或者您可能需要考虑在信号完成后关闭闹钟:

for i in range(10):
    signal.signal(signal.SIGALRM, signal_handler)
    signal.alarm(10)   # Ten seconds
    try:
        time.sleep(i * 2) #  Force it to break,
        print("Ok it works")
    except Exception, msg:
        print "Timed out!"
    signal.alarm(0)