2009-06-13 61 views
2

有沒有什麼辦法可以在基於django的代碼中的兩個線程之間共享相同的事務?在python/django中共享線程之間的事務範圍? (PostgreSQL)

問題是我有1.1的TestCase(將單個測試包裝到事務中)用於測試在不同線程[某種異步測試]中運行的代碼。因此,這些測試會創建一些旨在供第二個線程使用的數據。顯然,由於這個數據是在一個事務範圍內創建的,所以它對第二個線程是不可見的。但是,因爲這應該基本上是與PgSQL的相同連接(應該嗎?)我希望有一種方法可以共享這個事務範圍,所以我的第二個線程可以訪問其中添加的數據?

任何想法?

數據庫是PgSQL 8.3,驅動程序是postgresql_psycopg2。 Django - 主幹。

回答

3

我會說這是不可能的。據我所知,每個線程都有自己的PostgreSQL會話可以同時運行。考慮到PostgreSQL是一個MVCC數據庫,一個線程將無法訪問其他的更改,直到事務被提交 - 它不會出現在Django 1.1 TestCase的情況下。

如果你需要測試同時運行的東西,我很確定你需要使用TransactionTestCase

+0

TransactionTestCase正在殺死我 - 由於某些原因,TRUNCATE正在*永遠*完成...... – 2009-06-13 06:12:40