2

我在Google App Engine Python Flexible Environment上为重负载运行灵活的服务。我运行PSQ workers to handle tasks through Pub/SubGoogle云Python灵活环境多线程数据库工作者冻结

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

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被打印在多线程的工人。它永远不会完成任务 - 它只会停留在那条线上。

任何意见或指针在正确的方向将有很大的帮助。我一直在这个问题上挣扎了很长一段时间。

回答

0

我想出了什么问题,当'datastore_client'构造它的api客户端时,它默认使用gRPC。
显然,如果你使用多线程工人,这会冻结。
通过将环境变量中的GOOGLE_CLOUD_DISABLE_GRPC设置为True,可以强制它使用HTTPDatastoreAPI。这'修复'我的问题。