我有一个多线程的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完成的。
有什么想法吗?
答案 0 :(得分:5)
使用线程来卸载请求并不是一个好主意。有许多陷阱,并没有什么好处。主要问题(以及您的问题与这些问题有关)是:
正确的方法是:
PS。不要尝试为测试设置Celery或RQ。你应该模拟任务并单独测试它。