Сервер разработки App Engine не может выполнить поставленную в очередь задачу — без какой-либо трассировки стека

В настоящее время я пытаюсь ставить задачи в очередь в App Engine с помощью среды Flask, но у меня возникают некоторые трудности. Я запускаю свой код, и кажется, что задачи правильно поставлены в очередь, когда я проверяю сервер администратора по адресу localhost:8000/taskqueue. Однако консоль постоянно выводит следующую ошибку:

WARNING  2016-10-05 17:08:09,560 taskqueue_stub.py:1981] Task task1 failed to execute. This task will retry in 0.100 seconds

Кроме того, не похоже, что желаемый код выполняется.

У меня вопрос, почему мой код не работает? Я извиняюсь за очень широкий вопрос, однако нет трассировки стека, которая помогла бы мне перейти к чему-то более конкретному. Однако я упростил свой код, чтобы моя ошибка воспроизводилась. Приведенный ниже код должен вывести на консоль фразу «пример задачи» 5 раз. Однако этого не происходит.

#main.py

from google.appengine.api.taskqueue import taskqueue
from flask import Flask, Response

app = Flask(__name__)

@app.route("/get")
def get():
    for i in range(5):
        # attempt to execute the desired function 5 times
        # the message "sample task" should be printed to the console five times
        task = taskqueue.add(
            queue_name='my-queue',
            url='/sample_task',
        )
        message += 'Task {} enqueued, ETA {}.<br>'.format(task.name, task.eta)

    response = Response(message)
    return response

@app.route("/sample_task")
def sample_task():
    message = "sample task"
    print (message)
    return Response(message)


if __name__ == "__main__":
    app.run()

приложение.yaml

# app.yaml

runtime: python27
api_version: 1
threadsafe: true

# [START handlers]
handlers:
- url: /sample_task
  script: main.app
  login: admin

- url: /get
  script: main.app
  login: admin

очередь.yaml

# queue.yaml

queue:
- name: my-queue
  rate: 1/s
  bucket_size: 40
  max_concurrent_requests: 1

person B B    schedule 05.10.2016    source источник
comment
@Anthon: Спасибо, что нашли время решить мой вопрос. Обратные кавычки здесь, потому что у меня сложилось впечатление, что они необходимы для рендеринга блоков кода здесь, в StackOverflow. Похоже, я ошибся. Спасибо, что указали на это. Кодовые блоки были исправлены. Более того, я на самом деле уже нашел, как решить проблему. Похоже, мне просто нужно добавить methods= 'POST' во входные параметры роутера. Но все же, спасибо за проверку моего кода.   -  person B B    schedule 06.10.2016


Ответы (1)


Я нашел ответ здесь: https://stackoverflow.com/a/13552794

По-видимому, все, что мне нужно сделать, это добавить метод POST к любому обработчику, вызываемому для постановки в очередь.

So

@app.route("/sample_task")
def sample_task():
...

вместо этого должно быть:

@app.route("/sample_task", methods=['POST'])
def sample_task():
...
person B B    schedule 05.10.2016