0

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

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() 

app.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 

queue.yaml

# queue.yaml 

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

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

ответ

0

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

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

Так

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

вместо этого следует:

@app.route("/sample_task", methods=['POST']) 
def sample_task(): 
... 
Смежные вопросы