Google Cloud Python Flexible Environment Multithreaded datab



我在Google App Engine Python Flexible Environment上运行一个灵活的服务来应对重载。我运行 PSQ 工作人员通过发布/订阅处理任务。

只要

我与单线程工人一起工作,这一切都很好。在单线程工作线程上,如果我像这样实例化数据存储客户端:

from google.cloud import datastore
_client = datastore.Client(project='project-name-kept-private')

。并检索实体:

entity = _client.get(_client.key('EntityKind', 1234))

。它工作正常。

但是,一旦我在多线程工作线程中执行完全相同的操作,它就会冻结在最后一行:

entity = _client.get(_client.key('EntityKind', 1234))

我知道它在这一行上完全失败,因为我在该特定行之前和之后logging.error用户,如下所示:

import logging
logging.error('entity test1')
entity = _client.get(_client.key('EntityKind', 1234))
logging.error('entity test2')

entity test1entity test2都显示在单线程工作线程的日志中,但只有entity test1打印在多线程工作线程上。它永远不会完成任务——它只是卡在那条线上。

任何正确的建议或方向的指示都会有很大帮助。我一直在为这个问题而苦苦挣扎。

我弄清楚了问题所在,当"datastore_client"构造其 api 客户端时,默认情况下它使用 gRPC。
显然,如果您使用多线程工作线程,这会冻结。
通过将环境变量中的GOOGLE_CLOUD_DISABLE_GRPC设置为True,可以强制它使用HTTPDatastoreAPI 。这"解决"了我的问题。

最新更新