How can you limit the allowed execution time of sp

2020-04-09 04:37发布

Since the signal module is not supported in the python version of Google App Engine, what is the simplest way to call a method and throw/catch an exception if the method does not return in less than 2 seconds?

2条回答
不美不萌又怎样
2楼-- · 2020-04-09 05:16

If you are talking about RPC calls, such as the datastore, you can create an RPC with a deadline (see create_rpc), pass the RPC to your datastore function (db.get, db.put, etc...), then catch DeadlineExceededErrors.

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

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

The URLFetch fetch function also takes a deadline parameter.

For your own code you could implement checking yourself, see the time module.

查看更多
男人必须洒脱
3楼-- · 2020-04-09 05:34

In loops, you can store the time the loop started and check how long it's been going on each iteration.

If you're not in a loop, things are a bit trickier. You could add the time-checking bit every few lines of code. This, of course, makes for really ugly code, but without the ability to spawn threads that could run a timer in the background and interrupt the running code, there's not much of a way around it.

查看更多
登录 后发表回答