2009-06-13 7 views
2

Djangoベースのコードで2つのスレッド間で同じトランザクションを共有する方法はありますか?python/djangoのスレッド間でトランザクションスコープを共有していますか? (PostgreSQL)

問題は、別のスレッド[一種の非同期テスト]で動作しているコードをテストするための1.1のTestCase(個々のテストをトランザクションにラップするもの)があることです。したがって、これらのテストでは、この2番目のスレッドで使用する予定のデータがいくつか作成されます。明らかに、このデータはトランザクションスコープ内で作成されるため、2番目のスレッドからは見えません。それは基本的にPgSQLと同じ接続であるべきです(私はこのトランザクションスコープを共有する方法があるので、2番目のスレッドはその中に追加されているデータにアクセスできます)?

ご存じですか?

データベースはPgSQL 8.3です。ドライバはpostgresql_psycopg2です。 Django - トランク。

答えて

3

私はそれが不可能だと思います。私の知る限り、各スレッドは同時に実行できる独自のPostgreSQLセッションを持っています。 PostgreSQLがMVCCデータベースであるため、トランザクションがコミットされるまで、一方のスレッドは他方の変更にアクセスすることはできません。これは、Django 1.1 TestCaseの場合には発生しません。

同時に実行されるものをテストする必要がある場合は、TransactionTestCaseを使用する必要があります。

+0

TransactionTestCaseが私を殺しています - なぜなら、何らかの理由でTRUNCATEが* forever *を実行しているからです... –

+0

テストが終了する前に2番目のスレッドが停止しているかどうかチェックしましたか? MVCCごとに、PostgreSQLが切り捨てられたデータのコピーを格納しなければならないので、切り捨てがさらに遅く実行される可能性があります。 – mikl

+0

hm、それは面白いです..すべてのアイデアは、生涯すべてのテストを通してバックグラウンドスレッドを止めることではありませんでした。この場合、それぞれのsetUpとtearDownで2番目のスレッドの開始と停止をそれぞれ検討することがあります。 –

関連する問題