Облачные задачи Google и Google App Engine Python 3

Я пытаюсь работать с API облачных задач Google

В стандарте движка приложения Python2.7 у вас была эта удивительная библиотека ( отложенная), которая позволяла вам легко назначать рабочих для нескольких задач, которые могут выполняться асинхронно.

Итак, в обработчике webapp2 я мог бы сделать это:

create_csv_file(data):
  #do a bunch of work ...
  return

MyHandler(webapp2.Handler):
  def get(self)
    data = myDB.query()
    deferred.defer(create_csv_file, data)

Сейчас я работаю над новой средой исполнения Google App Engine Python 3, и отложенная библиотека недоступна для GAE Py3.

Является ли облачные задачи Google правильным решением / заменой?

Это то, где я сейчас нахожусь... Я искал в интернете в поисках ответа, но мои возможности Google подвели меня. Я нашел некоторые примеры, но они не очень хороши, и они выглядят так, как будто вы должны создавать / добавлять задачи из консоли gcloud или локально, но примеров добавления задач из конечной точки API-интерфейса переднего конца нет.

ExportCSVFileHandler(Resource):
  def get(self):
    create_task()
    return 

CSVTaskHandler(Resource):
  def(post):
    #do a lot of work creating a csv file
    return

create_task():
    client = tasks.CloudTasksClient(credentials='mycreds')
    project = 'my-project_id'
    location = 'us-east4'
    queue_name = 'csv-worker'

    parent = client.location_path(project, location)

    the_queue = {
        'name': client.queue_path(project, location, queue_name),
        'rate_limits': {
            'max_dispatches_per_second': 1
        },
        'app_engine_routing_override': {
            'version': 'v2',
            'service': 'task-module'
        }
    }

    queues = [the_queue]
    task = {
        'app_engine_http_request': {
            'http_method': 'GET',
            'relative_uri': '/create-csv',
            'app_engine_routing': {
                'service': 'worker'
            },
            'body': str(20).encode()
        }
    }

    # Use the client to build and send the task.
    response = client.create_task(parent, task)

    print('Created task {}'.format(response.name))

    # [END taskqueues_using_yaml]
    return response

1 ответ

Решение

Да, Cloud Tasks - это замена задач задач App Engine. API можно вызывать из любого места, то есть локально, из App Engine, из внешних служб и даже из gcloud. В примерах показано, как сделать это локально, но вы можете легко заменить свой старый код задачи на новую библиотеку облачных задач.

К сожалению, нет отложенной библиотеки для облачных задач. Есть несколько способов обойти это. Создайте отдельные конечные точки для обработчиков задач и используйте маршрутизацию App Engine, чтобы отправить задачу в нужную конечную точку, или добавьте метаданные в тело задачи, чтобы ваш обработчик соответствующим образом обработал запрос задачи.

Другие вопросы по тегам