【发布时间】:2013-07-04 16:24:05
【问题描述】:
我有一个多线程 django 应用程序,它在单独的线程中创建一些对象,以便更快地返回。创建的对象仅用于跟踪用户所做的事情,对时间没有任何影响。
以前的视图函数看起来像这样:
def foo(request):
#... do important computation...
bar(x, y, z)
return HttpResponse()
这里一切正常,但是当我把它改成这样并使用线程时:
def foo(request):
#... do important computation...
thread = Thread(target=bar, args=(x, y, z))
thread.start()
if testing_mode:
thread.join()
return HttpResponse()
第二个版本失败。这一切都是使用TransactionTestCase 和mySQL 完成的。
有什么想法吗?
【问题讨论】:
-
我已经更新了这个问题。是不是更清楚了?基本思想是,如果 bar() 在测试数据库中创建了一个对象,则它在第二个代码中不存在,但在第一个代码中。
-
你应该检查你的假设。如果考虑到 Django 数据库连接的工作方式,在线程中创建多个项目比串行创建多个项目要快,我会非常感到惊讶。
标签: database django multithreading unit-testing