我第一次尝试任务队列,虽然我认为我已经正确设置了所有内容,但我遇到了一个错误。
首先,这是我的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
Loadworker正在返回一个404。任务队列任务必须返回http代码200,否则将继续失败并重试。
确保loadworker返回一个http响应,类似于:
return HttpResponse("Do it",mimetype='text/plane')