Я работаю над созданием веб-фреймворка поверх флэшки, который включает в себя пакет обертки для операций с базой данных, который будет работать как для postgresql, так и для MySQL (я предпочитаю не использовать сторонние приложения, партия ORM, и это также поможет мне выучить несколько концепций).psycopg2 блокирует «подключиться», когда внутри потока
Я подробно расскажу о том, где проблема, описанная в названии, происходит. Мне удалось эмулировать проблему с очень succint группы модулей:
c.py
#coding=utf-8
import threading
import psycopg2
class Pool(object):
def __init__(self):
t = threading.Thread(target=self.push)
t.daemon = True
t.start()
t.join()
def push(self):
print 'creating connection'
self.conn = psycopg2.connect(database='geocercas', user='geo', password='geow', host='localhost')
print 'created connection'
def get(self):
return self.conn
b.py
#coding=utf-8
from c import Pool
pool = Pool()
a.py
#coding=utf-8
from b import pool
Если я run b.py Получаю результат:
creating connection
created connection
Process finished with exit code 0
Если я бегу a.py я получаю:
creating connection
И это как раз там висит.
Я запускаю Python 2.7.3 на Debian 7 Редактирование: просто чтобы быть ясным, блок возникает при импорте c из b, а затем b из a, когда c создает соединение внутри потока. Если я не использую потоки в c, отлично работает.