2012-09-29 8 views
14

W psycopg docs stan: „Połączenia Psycopg nie są zielone nitki bezpieczne i nie mogą być używane jednocześnie przez różnych zielonych wątków Próbując wykonać więcej niż jedną komendę na raz za pomocą jednego kursor na wątek spowoduje wystąpienie błędu (lub zakleszczenie. w wersjach przed 2.4.2). Dlatego programiści powinni unikać połączeń albo podziału między współprogram lub użyć blokady biblioteki przyjazne zsynchronizować połączenia udostępniane, np pooling „.Jak mogę połączyć połączenia za pomocą psycopg i gevent?

nie mogę znaleźć implementację basenie, który jest zielony bezpieczny wątku - czy są jakieś tam?

Odpowiedz

12

Zakładam wiesz moduł gevent-psycopg2, co sprawia psycopg Greenlet w obsłudze.

Szukasz rozwiązania pooling połączenie Próbowałem 2 rozwiązania:

  • SQLALchemy - wydaje się działać poprawnie z małp-połatany wątków i gevent-psycopg2. Klasa QueuePool wykorzystuje moduł threading wewnętrznie do blokowania, małpa łatanie jest zatem konieczne, chociaż gevent-psycopg2 sprawia psycopg2 zielono.

  • istnieje psycopg2connection pooling example w gevent przykłady

Próbowałem oba rozwiązania, ale nie przy obciążeniu produkcyjnym - więc nie mogę powiedzieć o ich solidności jeszcze.

+0

Zakończono przy użyciu przykładu puli połączeń w dokumentacji gevent – gone

+1

Zaktualizowany link do przykładu gevent psycopg2: https://github.com/gevent/gevent/blob/master/examples/psycopg2_pool.py –

+0

Dziękuję, właśnie zaktualizowałem odpowiedź. –

0

Oto dobry basen (nie tylko przykładem, ale stosowane w produkcji): psycopg2_pool.py

+0

to możliwe, aby używać go z SQLAlchemy? – Stephan

Powiązane problemy