Облачные задачи 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, чтобы отправить задачу в нужную конечную точку, или добавьте метаданные в тело задачи, чтобы ваш обработчик соответствующим образом обработал запрос задачи.