Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 阻止Google应用程序引擎中的请求处理程序_Google App Engine_Queue_Task_Handlers - Fatal编程技术网

Google app engine 阻止Google应用程序引擎中的请求处理程序

Google app engine 阻止Google应用程序引擎中的请求处理程序,google-app-engine,queue,task,handlers,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

我正在使用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-轮询pull任务队列以获得响应,直到有可用的响应为止(我知道我应该找到一种方法来改进该循环,但我只是在尝试):

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

我怀疑您看到的是来自开发服务器的问题中描述的行为,该服务器一次不能处理多个请求。因此,当您将断点放在POST方法中时,dev服务器实际上会暂停。要按预期查看此行为,请上载到App Engine


此外,请尝试使用应用程序引擎,而不是使用GET HTTP请求进行轮询。使用此功能,您可以直接从任务队列处理程序将响应推回到客户端,以通知流程已完成(或其他任何操作)。

您说得对!我把它部署到AppEngine上,它成功了。非常感谢。至于Channel API,我没有使用javascript客户端,我现在想为我的服务保留一个RESTful接口,但感谢您的建议。
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)