jme*_*etz 4 database django multithreading unit-testing
我有一个多线程的django应用程序,它在单独的线程中创建一些对象,以便更快地返回.创建的对象仅用于跟踪用户已完成的操作,并且不以任何方式对时间敏感.
视图函数看起来像这样:
def foo(request):
#... do important computation...
bar(x, y, z)
return HttpResponse()
Run Code Online (Sandbox Code Playgroud)
一切都运行正常,但当我改变它看起来像这样并使用线程:
def foo(request):
#... do important computation...
thread = Thread(target=bar, args=(x, y, z))
thread.start()
if testing_mode:
thread.join()
return HttpResponse()
Run Code Online (Sandbox Code Playgroud)
第二个版本失败了.这都是使用TransactionTestCase和mySQL 完成的.
有任何想法吗?
使用线程来卸载请求并不是一个好主意.有许多陷阱,并没有什么好处.主要问题(以及您的问题与这些问题有关)是:
正确的方法是:
PS.不要尝试为测试设置Celery或RQ.您应该只是模拟任务并单独测试它.