2014-04-11 38 views
0

我第一次嘗試任務隊列,雖然我認爲我已經正確設置了一切,但是出現錯誤。任務隊列的GAE錯誤。我的設置有問題嗎? (python)

首先,這裏是我的queue.yaml中的文件:

total_storage_limit: 500M 
queue: 
- name: loader 
    rate: 1/s 
    bucket_size: 1 

其次,這裏是我的代碼來調用我的任務隊列(這就是所謂的load.py)。它需要每天運行,所以我將這個腳本作爲cron作業運行。

for file in archiveList: 
     taskqueue.add(queue_name='loader',url='/tasks/loadworker',params = {'ID':file[:-4],'XML':str(file)}) 

我loadworker.py文件基本上是這樣的:

class MainPage(webapp2.RequestHandler): 
    def post(self): 
     ID = self.request.get('ID') 
     XML = self.request.get('XML') 
     tmp = trialDatabase.get_or_insert(ID) 
     #REST OF CODE GOES BELOW 

這裏是我看到的錯誤:

WARNING 2014-04-11 15:24:41,156 taskqueue_stub.py:1974] Task task936 failed to execute. This task will retry in 0.400 seconds 
INFO  2014-04-11 15:24:41,156 module.py:627] loadandprocess: "POST /tasks/loadworker HTTP/1.1" 404 - 

關閉我的頭頂,我想知道:做任務隊列「調用者」和任務隊列「工人」需要在同一模塊?我在我的默認app.yaml文件中有我的任務隊列工作器,並且我的加載器位於loadandprocess.yaml文件中。它是如何工作的,比如......每個任務工作者都會調用我的loadandprocess.yaml文件中指定的B4實例類?

謝謝!

編輯

這裏是app.yaml中的相關部分:

- url: /tasks/loadworker 
    script: loadworker.application 
    login: admin 
+1

你有你的app.yaml文件的處理程序/ tasks/loadworker指向loadworker.py? – IanGSY

+0

是的,請參閱上面編輯過的部分 – user3058197

+0

在__loadworker.py__文件的底部是否有類似__application = webapp2.WSGIApplication([('/ tasks/loadworker',MainPage)])__?返回的錯誤是404,找不到頁面,這表示請求沒有被處理。 – IanGSY

回答

2

Loadworker返回一個404一個任務隊列任務必須返回一個HTTP代碼200,否則它將繼續失敗並重試。

確保loa​​dworker返回一個HTTP響應,是這樣的:

返回的HttpResponse( 「你那裏」,MIME類型= 'text/plain的')

+0

我的頁面末尾有:** application = webapp2.WSGIApplication([('/ tasks/loadworker',MainPage)],debug = True)**。我想我需要添加一個返回語句在我的def post(self):方法? – user3058197

+0

我認爲這不是問題,如果頁面運行成功,請求將默認返回200個狀態碼,您無需自己設置。 – IanGSY

+0

找出它 - 工作人員和處理程序需要在同一個模塊中。我在app.yaml和我的處理程序loadandprocess.yaml中有我的工人。謝謝你的回覆,但我很感激。 – user3058197

相關問題