0

Je suis un débutant à flacon. J'ai besoin d'implémenter le pool de connexion dans flask, ce qui suit est ma pile logicielle: 1. Flask - 0.12.2 2. Version Python - 3.4.3 3. Version du pilote Python couchbase - 2.2.1 4. Version Couchbase - Mon besoin est - au démarrage du serveur - exécuter de façon répétée 3-4 processus après chaque 'n' secondes c'est-à-dire que certains processus s'exécute toutes les 1 seconde, certains fonctionnent toutes les 5 secondes, etc. J'ai utilisé le module "threading" en python pour exécuter ces processus parallèles. Je ne voulais pas créer & lien étroit des processus ci-dessus, donc je crée des connexions nécessaires pour Couchbase seaux au niveau du ballon de démarrage comme ci-dessous: (Les lignes de code ci-dessous dans le fichier « app.py »)Connexion Pooling dans flacon en utilisant couchbase comme base de données

cbBkt1Conn = Couchbase.connect(host=<host_name>, 
bucket=<bucket1>, password=<bucket1Password>) 
cbBkt2Conn = Couchbase.connect(host=<host_name>, 
bucket=<bucket3>, password=<bucket3Password>) 
cbBkt3Conn = Couchbase.connect(host=<host_name>, 
bucket=<bucket3>, password=<bucket3Password>) 

etc

Mais, quand flacon commence après 3-4 runs je reçois l'exception suivante:

File "/usr/local/lib/python3.4/dist-packages/couchbase/n1ql.py", line 384, 
in __iter__ 
    self._start() 
File "/usr/local/lib/python3.4/dist-packages/couchbase/n1ql.py", line 297, 
in _start 
cross_bucket=self._params.cross_bucket) 

couchbase.exceptions.ObjectThreadError: <Couldn't lock. If LOCKMODE_WAIT 
was passed, then this means that something has gone wrong internally. 
Otherwise, this means you are using the Connection object from multiple 
threads. This is not allowed (without an explicit lockmode=LOCKMODE_WAIT 
constructor argument, C Source=(src/oputil.c,428)> 

sur une enquête plus approfondie, je trouve que depuis que je suis en utilisant le même ac objet de connexion ross plusieurs threads, cela n'a pas été autorisée (comme ci-dessus trace d'erreur & liens ci-dessous):

http://docs.couchbase.com/sdk-api/couchbase-python-client-2.2.1/api/threads.html

Les liens suggèrent d'utiliser l'option « filetage » avec « de LOCKMODE_WAIT », mais cela va à l'encontre du but entier.

Je suis venu aussi à travers sqlalchemy, mais cela ne soutiens Couchbase

Requête: 1) Comment puis-je mettre en œuvre la mise en commun de connexion Flask? Veuillez me guider à un exemple/référence pour mettre en œuvre ceci.

Merci, Sachin Vyas.

Répondre

0

Il est préférable de créer de nouvelles connexions dans un environnement de thread. (Et peut-être réfléchir à pourquoi vous ne voulez pas partager pour commencer).

Il est préférable de penser à des connexions comme des lignes de maison à l'ancienne. Si une personne décroche et compose dans le salon, toute personne souhaitant passer un appel sur la même ligne recevra la même conversation. S'il prend le téléphone et commence à appeler pour une pizza, alors les personnes qui utilisent le téléphone seront interrompues et il n'aura pas sa pizza.

Il y a deux options: soit la deuxième personne qui veut utiliser la maison devra attendre jusqu'à ce que la ligne soit libre, ou ouvrir une nouvelle connexion pour chaque personne dans la maison.

+0

Je noterais que dans le client Couchbase Python, nous déverrouillons le GIL à l'entrée et que nous pouvons canaliser plusieurs opérations en file d'attente, pensant que la boucle d'E/S n'est pilotée qu'une seule fois dans ce cas particulier. Généralement avec Couchbase, nous recommandons de partager un client, mais il y a beaucoup de facteurs. –