在 Google App Engine 中屏蔽请求处理程序



我正在使用python开发一个GAE应用程序,我希望它同时为请求提供服务。对于此效果,我已将线程安全设置为 true。我在请求处理程序中定义了两个方法:

POST - 将纳入任务排队以异步执行,稍后该任务本身会将拉取任务作为响应排队:

def post(self):
    message = self.request.body
    taskqueue.add(url='/process', params={'message': message}) #this task will enqueue a pull task as a response

GET - 轮询拉取任务队列以获取响应,直到有一个可用的响应(我知道我应该找到一种方法来改善该循环,但我只是在尝试一下):

def get(self):
    (...)
    tasks = queue.lease_tasks_by_tag(1, 100, tag)
    while tasks.__len__() == 0:
        time.sleep(1)
        tasks = queue.lease_tasks_by_tag(1, 100, tag) 

客户端应用程序调用 POST,然后调用 GET。我在由 POST 方法排队的任务上放置了一个断点,但是当请求处理程序卡在循环中时,它从未被调用。我以为应用程序应该有几个线程为请求提供服务,那么为什么它不同时执行推送请求处理程序呢?我将不胜感激对此的任何帮助。

我怀疑您从开发服务器看到了问题中描述的行为,该服务器一次无法处理多个请求。因此,当您将断点放在 POST 方法中时,开发服务器实际上已暂停。要查看此行为是否符合预期,请上传到 App Engine。

此外,与其使用 GET HTTP 请求进行轮询,不如尝试使用 App Engines Channel API。使用它,您可以直接从任务队列处理程序将响应推送回客户端,以通知该过程已完成(或其他任何操作)。

最新更新