2012-11-25 88 views
0

我正在開發使用python的GAE應用程序,我希望它能夠同時處理請求。爲了達到這個效果,我已經設置了線程安全true。 我已經定義在我的請求處理方法有兩種:阻止Google App Engine中的請求處理程序

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

我懷疑您看到的是您的問題中描述的來自開發服務器的行爲,該服務器一次不能提供多個請求。因此,當您將斷點放在POST方法中時,開發服務器會被有效暫停。要按預期查看此行爲,請上傳到App Engine。

此外,不是使用GET HTTP請求進行輪詢,而是嘗試使用App引擎Channel API。使用這個,你可以直接從你的任務隊列處理程序中將響應反饋給客戶端,以通知該過程已完成(或其他)。

+0

你說得對!我將它部署到AppEngine,它工作。謝謝一堆。至於Channel API,我沒有使用JavaScript客戶端,現在我想爲我的服務保留一個RESTful界面,但是感謝您的建議。 – djed

相關問題