首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GAE-Python: Appstats可以记录背景线程中的RPC吗?

GAE-Python: Appstats可以记录背景线程中的RPC吗?
EN

Stack Overflow用户
提问于 2013-09-17 14:34:20
回答 1查看 202关注 0票数 0

我用Appstats记录了我的GAE项目中ndb的使用情况,而且效果很好。我的Appstats设置是遵循这位医生的。

最近,我将一些ndb代码移到后台线程上执行,但是这些ndb调用不再显示在Appstats控制台UI上。

我在dev和prod中都尝试过Appstats,它们不记录用后台线程制作的ndb RPC。

为了明确这个问题,我的意思是: Appstats是为:

代码语言:javascript
复制
class MyHandler(webapp2.RequestHandler):
    def put(self):
        ...
        do_a_lot_of_ndb_work()
        ...

但是Appstats并不适用于:

代码语言:javascript
复制
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),线程使用情况从线程引用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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分钟以上的时间来处理的话,这可能会花费很多钱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18852756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档