2

Google App Engine Python Flexible Environmentに負荷の高い柔軟なサービスを実行しています。私はPSQ workers to handle tasks through Pub/Subを実行します。Google Cloud 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_GRPCTrueを設定すると、強制的にHTTPDatastoreAPIを使用するようになります。これは私の問題を「修正」します。

関連する問題