GAE任务队列错误。我的设置有问题吗?(python)

0 投票
1 回答
512 浏览
提问于 2025-04-18 02:22

我第一次尝试使用任务队列,虽然我觉得设置得差不多了,但还是遇到了一个错误。

首先,这是我的 queue.yaml 文件:

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

其次,这是我调用任务队列的代码(叫做 load.py)。这个脚本需要每天运行,所以我把它设置成了一个定时任务。

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 个回答

2

loadworker 返回了一个 404 错误。这意味着一个任务队列的任务必须返回一个 HTTP 状态码 200,否则它会一直失败并尝试重新执行。

确保 loadworker 返回一个 HTTP 响应,像这样:

return HttpResponse("完成了", mimetype='text/plain')

撰写回答