Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何测试访问数据库的其他线程_Python_Django_Multithreading_Unit Testing - Fatal编程技术网

Python 如何测试访问数据库的其他线程

Python 如何测试访问数据库的其他线程,python,django,multithreading,unit-testing,Python,Django,Multithreading,Unit Testing,django在测试期间使用的数据库似乎没有与其他线程共享 例如: 在TestCase类中: def my_test(self): print(MyModel.objects.all()) my_function() 在我的课堂上: def worker(): print(MyModel.objects.all()) def my_function(): thread = Thread(target=worker) thread.start() 控制台

django在测试期间使用的数据库似乎没有与其他线程共享

例如:

在TestCase类中:

def my_test(self):
    print(MyModel.objects.all())
    my_function()
在我的课堂上:

def worker():
    print(MyModel.objects.all())

def my_function():
    thread = Thread(target=worker)
    thread.start()
控制台结果:

[<MyModel object>, <MyModel object>, <MyModel object> ... ]
[]
[,…]
[]
所以我们得到了第一个调用,但是一旦我们进入另一个线程,它就不再使用测试数据库了

我看了看: 并尝试将同一个db用于“NAME”和“TEST_NAME”,但对我来说不起作用


即使线程正在访问db,我也可以做些什么来测试它们呢?

Django的
TestCase
在一个事务中运行每个测试类。没有提交任何更改,因此其他线程无法读取这些更改的效果

解决方案是使用
TransactionTestCase
。它将在默认的自动提交模式下运行查询,您的更改将立即提供给其他线程