【发布时间】:2012-04-02 12:11:53
【问题描述】:
我在 Python 模块中有以下代码;它使用子进程启动命令行应用程序并读取应用程序写入标准输出的输出。
如果命令行应用程序在 15 秒后未完成,我希望代码超时。我已经使用 signal.alarm 来尝试实现这一目标。
在没有 Django 的情况下测试模块时,它会按预期在 15 秒后超时。但是,当我从 Django 视图调用代码时,它不会在 15 秒后超时,而是继续运行直到生成的进程超时。
我怎样才能让它做我想做的事?
p = get_process() # spawns a process using subproccess and returns the process handle
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(15)
try:
s= p.stdout.read()
except:
p.kill()
s = "Operation timed out"
【问题讨论】:
-
也许 Django 正在一个不同的线程中运行您的代码?中断总是发生在主线程中,可能不是你的代码。