2011-02-07 130 views
2

我正在嘗試構建和調試我的第一個GAE應用程序,並且已經從Stackoverflowers的真棒支持中獲益,以獲取我在默認隊列上處理任務的位置。謝謝!Google App Engine中的通道和TaskQueue(客戶端調試)

但是,我想使用隊列來演示如何在後臺執行一些「長期」工作。我的想法是:

  1. 接收處理大文件的請求。
  2. 存儲文件並排入任務。
  3. 返回響應。
  4. 在後臺處理文件。
  5. 讓客戶通過渠道知道工作已經完成!

我有這一切工作,但一個問題。在我的開發服務器上,任務隊列似乎不在後臺處理任務。爲了模擬長時間運行的工作,我剛剛在那裏彈出睡眠。

def post(self): 
    time.sleep(60) 
    #use a channel to let the client know we're done 

看來GAE開發服務器是單線程的。直到該項目已經從隊列中處理完畢,它纔會做出響應?這個假設是正確的嗎?有任何想法嗎?

由於

添加代碼exanples:

#code to enqueue task 
taskqueue.add(url='/processSubmission', params={'key': activity.key() }, transactional=False) 

#class that processes queued work 
class ProcessSubmission(webapp.RequestHandler): 
    def post (self): 
    time.sleep(60) 
    activity = db.get(db.Key(encoded=self.request.get('key'))) 
    activity.approved = True 
    activity.put() 
    channel.send_message(activity.userid, 'Wahoo! we are done') 
+0

你可以發佈你的代碼的相關部分? – systempuntoout 2011-02-07 08:11:45

+0

完成 - 添加了代碼。希望就夠了。 – ConfusedNoob 2011-02-07 18:14:09

回答

2

是的,應用程序引擎dev_appserver是單線程的,並且僅一次處理單個請求。但是,您的面向用戶的請求應在開始處理任務隊列請求之前返回。

相關問題