2011-07-28 39 views
1

我用Google Task Queue Python API編寫了我的第一個代碼。每次將URL輸入地址欄時,都應該發送一封電子郵件。雖然它在我的儀表板中顯示default任務隊列中的任務,但我不知道爲什麼即使在啓動它一小時後也不執行它。使用任務隊列發送電子郵件

queue-mail.py:-

class sendMail(webapp.RequestHandler): 
    def post(self): 
     mail.send_mail(
      '[email protected]', 
     self.request.get('to'), 
     self.request.get('subject'), 
     self.request.get('body')) 


taskqueue.add(url='/sendMail',params=dict(
    to='[email protected]', 
subject = 'Testing task queues', 
body = 'this is a message!')) 

app.yaml中: -

handlers: 
- url: /mail 
    script: queue-mail.py 

我調用的代碼:appid.appspot.com/mail

+0

當我點擊現在運行。它顯示一條標題,表示運行命令已成功發出。但我仍然沒有收到郵件。 – haltTm

+0

這是在本地開發服務器還是生產服務器上?你有沒有檢查你的日誌的例外?作爲說明,我不確定它是否是錯誤格式,但是'sendMail'方法的縮進是錯誤的,mail.send_mail應該在'post' –

+0

生產服務器下縮進更多。縮進在我部署的代碼中是正確的。我在這裏寫的代碼中加入了相同的內容。 – haltTm

回答

1

看到你的問題解決了,我想我會發佈一個正式的答案。 post工作,而get沒有,因爲這是任務隊列的默認方法。如果你看看function documentation,其中一個kwargs是方法,你可以在其中指定get/post/etc,但是因爲你沒有在你的代碼中,它默認發佈。作爲一個方面說明,你可能沒有看到缺少處理程序的404,而是405的「方法不允許」(因爲任務隊列試圖發送一個post請求給一個沒有post函數的處理程序定義)

+0

爲什麼'self.response.get'在post方法中也能工作這兩個獨立的東西是否有辦法看到實時日誌。他們被推遲了大約半個小時,我猜。 – haltTm

+0

你的意思是'self.request.get'嗎?'get'函數並不是指http方法,它只是一個通用的python函數來檢索值。對於'self.request.get(x,None)'有用,如果x不存在(或者其他一些默認值),它將返回None。你的控制檯上的日誌是實時的,它們不是「延遲」的所有。 –

3

請仔細閱讀有關how to use the webapp framework的文檔的部分。您已經定義了一個處理程序類,但是您尚未爲其定義WSGI應用程序,或者在腳本中調用了它。結果,你的處理程序代碼永遠不會運行。

由於您已將代碼排入模塊級任務,並且尚未定義main()函數,因此每次向模塊發送請求時,都會執行該代碼 - 所有代碼都會執行一次又一次地排隊完成同樣的任務,而沒有真正做任何事情。您需要將代碼分開,以便將執行任務的代碼排入隊列,並將排隊代碼放入另一個處理程序中,該處理程序可以從不同的URL調用。

0

我認爲send_mail將任務發送到郵件服務,它將發送電子郵件的任務排隊。因此,我不確定taskqueue.add()會比send_mail()更快。 (假設你的電子郵件任務不執行任何RPC調用等)。

相關問題