如何从 App Engine 实例异步查询 GCP 搜索 API?

How do I query GCP Search APIs asynchronously from an App Engine instance?

我需要使用搜索 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')

如果没有问题,您可以在控制台 -> 工具 -> 云任务中找到您的任务