2011-02-01 20 views
3

由于Python版本的Google App Engine中不支持信号模块,因此如果方法在2秒内未返回,调用方法并抛出/捕获异常的最简单方法是什么?如何限制python版Google App Engine中特定方法的允许执行时间?

+0

我没有看到任何关于它不被支持的文档。你有没有找到任何东西,或只是尝试使用它,并注意到,当你导入它时,你会得到一个空的模块? – 2012-09-22 07:08:53

回答

4

如果你正在谈论RPC调用,如数据存储,您可以创建一个最后期限(见create_rpc)的RPC,通过RPC到您的数据存储功能(db.getdb.put,等...),然后抓DeadlineExceededErrors

# Set a five-second timeout 
rpc = db.create_rpc(deadline=5) 

# A query: 
query = YourModel.all().fetch(100, rpc=rpc) 

URLFetchfetch功能还需要一个期限参数。

对于您自己的代码,您可以实施自检,请参阅time模块。

+0

谢谢。在许多情况下,RPC超时功能应该会有所帮助,但是如果要调用的方法不会等待查询或数据存储区功能完成,那么如何才能抛出超时异常?作为一个人为的例子,假设我调用的方法陷入了无限循环。 – Chris 2011-02-01 09:57:05

0

在循环中,您可以存储循环开始的时间,并检查每次迭代进行的时间。

如果你是而不是在循环中,事情有点棘手。您可以每隔几行代码添加一次时间检查位。这当然会造成非常丑陋的代码,但是如果没有能够产生可以在后台运行计时器的线程并中断正在运行的代码,则没有太多办法可以解决这个问题。

相关问题