0

我正在 Flask 之上构建一个 Web 框架,其中包括一个用于数据库操作的包装器包,适用于 postgresql 和 MySQL(我不喜欢使用第三方 ORM,这也将帮助我学习一些概念) .

我将详细介绍一个小例子,说明标题中描述的问题发生的位置。我设法用一组非常简洁的模块来模拟这个问题:

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()

一个.py

#coding=utf-8
from b import pool

如果我运行 b.py 我会得到结果:

creating connection
created connection

Process finished with exit code 0

如果我运行 a.py 我得到:

creating connection

它就挂在那里。

我在 Debian 7 上运行 Python 2.7.3 编辑:为了清楚起见,当从 b 导入 c 时,当 c 在线程内创建连接时,从 a 导入 b 时出现块。如果我不在 c 中使用线程,a 可以正常工作。

4

1 回答 1

0

所以,事实证明我没有阅读文档中的这个小花絮,这是问题的原因:导入线程代码

于 2013-07-03T16:03:32.843 回答