我用Appstats记录了我的GAE项目中ndb的使用情况,而且效果很好。我的Appstats设置是遵循这位医生的。
最近,我将一些ndb代码移到后台线程上执行,但是这些ndb调用不再显示在Appstats控制台UI上。
我在dev和prod中都尝试过Appstats,它们不记录用后台线程制作的ndb RPC。
为了明确这个问题,我的意思是: Appstats是为:
class MyHandler(webapp2.RequestHandler):
def put(self):
...
do_a_lot_of_ndb_work()
...但是Appstats并不适用于:
class MyHandler(webapp2.RequestHandler):
def put(self):
...
background_thread.start_new_background_thread(do_a_lot_of_ndb_work, [])
...我可以在appengine_config.py中更改一些参数,或者做一些使Appstats对两者都有效的事情吗?
Update:上面的代码片段正在后端运行(basic_scaling,max_instances=1),线程使用情况从线程引用
发布于 2013-09-17 14:45:26
你不应该以这种方式使用线程。执行运行时间超过60秒请求窗口的函数的正确方法是使用Taskqueue API。在任务超时之前,给您一个10分钟的窗口。
https://developers.google.com/appengine/docs/python/taskqueue/
如果您的确实需要做更多的处理,那么请考虑使用后端。
https://developers.google.com/appengine/docs/python/backends/
如果您希望异步运行ndb调用以获得性能,那么这里描述的tasklet装饰器非常优秀,并且强烈推荐:
https://developers.google.com/appengine/docs/python/ndb/async
( SDK的最新版本1.8.4允许您使用@transactional_tasklet装饰器在tasklet中运行事务。)
我将所有这三种方法都用于那些不需要支撑主请求线程的东西,而appstats在所有这些情况下都运行得很好。
你也应该好好看看你想要做的事情,看看它是否可以被合理地分成几个小块,因为如果你需要10分钟以上的时间来处理的话,这可能会花费很多钱。
https://stackoverflow.com/questions/18852756
复制相似问题