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。這'修復'我的問題。