GAE / Python每个请求都引发了一个新进程

时间:2012-11-25 17:26:10

标签: python google-app-engine

当任何单个请求进入时,我收到此警告。似乎该进程将在处理请求后立即关闭。

由于我无法发布图片,因此我会复制并粘贴一些日志。

2012-11-25 09:12:37.441 /task/process-block 200 1609ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
I 2012-11-25 09:12:37.440 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This requ...

2012-11-25 09:12:26.054 /task/process-block 200 2160ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
I 2012-11-25 09:12:26.053 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This requ...

2012-11-25 09:12:14.036 /task/process-block 200 3156ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
I 2012-11-25 09:12:14.036 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This requ...

根据我的理解,当没有请求进入时,处理应保持至少15分钟,但上面的日志显示该进程被杀死的时间不超过10秒。目前我只能看到一个实例类型化的动态(以及我在检出时看不到任何实例运行的几小时),并且该实例即使完成处理前一个请求也不响应请求。相反,将生成一个新实例并响应请求。

是错误还是设置问题?我的应用程序使用python 2.7线程安全,我将最大空闲实例设置为1,并将待处理延迟时间设置为15.0秒。

更新

我将Max Idle Instances更改为50,问题仍然存在。

1 个答案:

答案 0 :(得分:0)

运行两天后,问题就消失了。任务被推入队列是一项非常耗时的任务,因为它需要从互联网上检索一些数据,通常需要1秒以上的时间。

现在任务的运行时间平均减少到200毫秒,因为它已经赶上了数据生产者,因此大多数时候它只是发现没有更多的数据需要处理和返回。

所以我猜当GAE收到请求时,它会首先预测这个请求是否可以在1秒内完成。如果答案是肯定的,GAE将使用现有流程来处理它;或者它将启动一个新进程并保留旧进程以处理其他短时间请求。这可以解释为什么总会有一个新的过程,这也可以解释为什么某个实例的年龄很长但没有处理很多请求。