在python/django中在线程之间共享事务范围?(PostgreSQL)

在python/django中在线程之间共享事务范围?(PostgreSQL),django,postgresql,transactions,psycopg2,django-testing,Django,Postgresql,Transactions,Psycopg2,Django Testing,在基于django的代码中,有没有办法在两个线程之间共享相同的事务 问题在于,我有1.1的TestCase(将单个测试打包到事务中的测试用例),用于测试在不同线程中运行的代码[一种异步测试]。所以这些测试创建了一些数据,这些数据将被第二个线程使用。显然,由于此数据是在事务范围内创建的,因此第二个线程看不到它。但由于这基本上应该是与PgSQL相同的连接(应该吗?),我希望有一种方法可以共享此事务范围,以便我的第二个线程可以访问添加到其中的数据 有什么想法吗 数据库是PgSQL 8.3,驱动程序是p

在基于django的代码中,有没有办法在两个线程之间共享相同的事务

问题在于,我有1.1的TestCase(将单个测试打包到事务中的测试用例),用于测试在不同线程中运行的代码[一种异步测试]。所以这些测试创建了一些数据,这些数据将被第二个线程使用。显然,由于此数据是在事务范围内创建的,因此第二个线程看不到它。但由于这基本上应该是与PgSQL相同的连接(应该吗?),我希望有一种方法可以共享此事务范围,以便我的第二个线程可以访问添加到其中的数据

有什么想法吗


数据库是PgSQL 8.3,驱动程序是postgresql_psycopg2。Django-trunk.

我认为这是不可能的。据我所知,每个线程都有自己的PostgreSQL会话,可以并发运行。考虑到PostgreSQL是一个数据库,在提交事务之前,一个线程将无法访问另一个线程的更改——Django 1.1
TestCase
的情况下就不会这样了


如果您需要测试并发运行的东西,我很确定您需要使用。

TransactionTestCase正在扼杀我-出于某种原因,TRUNCATE需要花费很长时间才能完成…您是否检查了第二个线程是否在测试结束前已停止?这可能会导致截断运行得更慢,因为根据MVCC,PostgreSQL必须存储截断数据的副本。嗯,这很有趣。。整个想法不是在整个测试生命周期中停止后台线程。在这种情况下,我可能会考虑在每个设置和拆卸中分别启动和停止第二个线程。当使用安装和拆卸时,我认为您是正确的,但是这取决于测试的性质。一般来说,要使测试成为原子测试,两个线程必须在同一个数据集上工作,并且为每个测试启动一个新线程可能是确保这一点的最干净的方法。是的,我以前考虑过-只是有点担心在某个点上第二个线程启动可能不是即时的;)