如何从 App Engine 实例异步查询 GCP 搜索 API?
How do I query GCP Search APIs asynchronously from an App Engine instance?
-
google-app-engine
-
google-search-api
-
google-cloud-platform
-
google-app-engine-python
-
app-engine-flexible
我需要使用搜索 API 来搜索我的 App Engine 索引文档。据我所知,搜索 API 只能在标准环境中用 google.appengine API 引用。
我的问题是某些补水、冲洗和查询需要超过 60 秒的时间。我需要 return 来自 App Engine 的响应,继续在后台处理请求,然后将结果发布到 Pub/Sub。但是,我可以在标准环境中生成线程或使用 background_thread。我会切换到灵活的环境,但我无法使用 Python 搜索 API 库。
我唯一的选择是切换到 flex 环境并使用 REST APIs 吗?
您可能想要使用 App Engine 任务队列,这是一个任务调度程序,用于将待处理的任务排队等待另一个 App Engine 执行,因为 App Engine 是单线程引擎。
例如,
1.设置新服务来处理任务(可选)
设置一个类似于您的 app.yaml
的 yaml 调用 newtaskworker.yaml
,因为您可能希望另一个服务来执行任务而不是原始服务。
唯一不同的是记得为它添加服务名称,service: newtaskworker
记得按gcloud app deploy newtaskworker.yaml
部署
2。设置队列
阅读How to Create new queue,一般来说你需要一个queue.yaml
来排队任务。记得按gcloud app deploy queue.yaml
部署
queue:
- name: queue_name
rate: 20/s #You may limit the speed of *START* new task here
bucket_size: 40
max_concurrent_requests: 10 #This is limited by your max_instances allowed in newtaskworker.yaml, you may simply omit it
3。最后你的代码
from google.appengine.api import taskqueue
#/deleteTask
class DeleteTask(webapp2.RequestHandler):
def get(self):
paramA = self.request.get('paramA')
paramB = self.request.get('paramB')
#your Search delete here
class GetPostDataTask(webapp2.RequestHandler):
def get(self):
#If you don't want to use a new service, simply use 'default` in target.
#Your Go to Pub/Sub work here.
taskqueue.add(queue_name='queue_name', url='/deleteTask', method='GET', params={'paramA': 1, 'paramB': 2}, target='newtaskworker')
如果没有问题,您可以在控制台 -> 工具 -> 云任务中找到您的任务
google-app-engine
google-search-api
google-cloud-platform
google-app-engine-python
app-engine-flexible
我需要使用搜索 API 来搜索我的 App Engine 索引文档。据我所知,搜索 API 只能在标准环境中用 google.appengine API 引用。
我的问题是某些补水、冲洗和查询需要超过 60 秒的时间。我需要 return 来自 App Engine 的响应,继续在后台处理请求,然后将结果发布到 Pub/Sub。但是,我可以在标准环境中生成线程或使用 background_thread。我会切换到灵活的环境,但我无法使用 Python 搜索 API 库。
我唯一的选择是切换到 flex 环境并使用 REST APIs 吗?
您可能想要使用 App Engine 任务队列,这是一个任务调度程序,用于将待处理的任务排队等待另一个 App Engine 执行,因为 App Engine 是单线程引擎。
例如,
1.设置新服务来处理任务(可选)
设置一个类似于您的 app.yaml
的 yaml 调用 newtaskworker.yaml
,因为您可能希望另一个服务来执行任务而不是原始服务。
唯一不同的是记得为它添加服务名称,service: newtaskworker
记得按gcloud app deploy newtaskworker.yaml
2。设置队列
阅读How to Create new queue,一般来说你需要一个queue.yaml
来排队任务。记得按gcloud app deploy queue.yaml
queue:
- name: queue_name
rate: 20/s #You may limit the speed of *START* new task here
bucket_size: 40
max_concurrent_requests: 10 #This is limited by your max_instances allowed in newtaskworker.yaml, you may simply omit it
3。最后你的代码
from google.appengine.api import taskqueue
#/deleteTask
class DeleteTask(webapp2.RequestHandler):
def get(self):
paramA = self.request.get('paramA')
paramB = self.request.get('paramB')
#your Search delete here
class GetPostDataTask(webapp2.RequestHandler):
def get(self):
#If you don't want to use a new service, simply use 'default` in target.
#Your Go to Pub/Sub work here.
taskqueue.add(queue_name='queue_name', url='/deleteTask', method='GET', params={'paramA': 1, 'paramB': 2}, target='newtaskworker')
如果没有问题,您可以在控制台 -> 工具 -> 云任务中找到您的任务