在Google App Engine中阻止请求处理程序

时间:2012-11-25 16:11:58

标签: google-app-engine queue task handlers

我正在使用python开发一个GAE应用程序,我希望它能同时处理请求。为此,我将 threadsafe 设置为 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方法排队的任务上放了一个断点,但是当循环中有一个请求处理程序时,它永远不会被调用。 我认为应用程序应该有多个线程为请求提供服务,那么为什么它不会同时执行推送请求处理程序呢? 我对此表示感谢。

1 个答案:

答案 0 :(得分:1)

我怀疑您是从开发服务器看到问题中描述的行为,它一次不能提供多个请求。因此,当您将断点放在POST方法中时,开发服务器将被有效暂停。要按预期查看此行为,请上传到App Engine。

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