0

Я работаю над созданием веб-фреймворка поверх флэшки, который включает в себя пакет обертки для операций с базой данных, который будет работать как для 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, отлично работает.

ответ

0

Так что получается, что я не смог прочитать этот маленький лакомый кусочек в документации, которая была причиной проблемы: Importing in threaded code

 Смежные вопросы

  • Нет связанных вопросов^_^