2

Je cours un service flexible pour charge lourde sur Google App Engine Python Flexible Environment. Je cours PSQ workers to handle tasks through Pub/Sub.Google Cloud Python Environnement flexible Travailleur de base de données multithread fige

Tout cela est bien et dandy tant que je travaille avec des travailleurs monovis. Sur les travailleurs filetés simples, si j'instancier un client datastore comme ceci:

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

... et récupérer une entité:

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

... ça fonctionne très bien.

Cependant, une fois que je fais exactement la même chose dans un travailleur multi-thread, il fige sur la dernière ligne:

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

Je sais que ce ne exactement sur cette ligne parce que je l'utilisateur logging.error avant et après ligne spécifique comme ceci:

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

La ligne entity test1 et entity test2 deux apparaissent dans les journaux sur un seul thread travailleur, mais seulement entity test1 est imprimé sur un travailleur multi-thread. Il ne finit jamais la tâche - il reste coincé sur cette ligne.

Tout conseil ou indications dans la bonne direction serait d'une grande aide. J'ai lutté avec ces problèmes depuis un certain temps maintenant.

Répondre

0

J'ai trouvé quel était le problème, quand le client 'datastore_client' construit son client api, il utilise gRPC par défaut.
Apparemment, cela gèle si vous utilisez des travailleurs multithread.
En réglant GOOGLE_CLOUD_DISABLE_GRPC sur True dans les variables d'environnement, vous le forcez à utiliser HTTPDatastoreAPI. Cela "corrige" mon problème.