无论工人数量如何,使用 xdist 进行 Pytest 所需的时间要长 16 倍

dan*_*mer 5 python pytest pytest-django

我刚刚将 pytest 添加到现有的 Django 项目中 - 所有单元测试都使用 Django 的unittest子类等。我们使用 SQLite 内存数据库进行测试。

  • manage.py test我们的测试套件大约需要 80 秒
  • py.test采取相同的
  • py.test -n1(或-n4,或类似的东西)大约需要 1280 秒。

我期望有开销来支持该分发,但显然-n4,在大型测试套件上,它应该快大约 3-4 倍。

发现...

到目前为止,我已将问题追溯到数据库访问。测试运行得很快,直到第一次访问数据库,但在第一次.save()调用 Django 模型时,测试将非常慢。

对工人进行一些分析后,看起来他们花了很多时间等待锁,但我不知道这是否是一个可靠的发现。

我想知道数据库上是否存在某种锁定,有人建议我内存中的 SQLite 数据库可能是一个内存映射文件,并且锁定可能发生在工作人员之间,但显然每次调用 open使用 SQLite 的内存数据库将返回一个完全独立的实例。


就目前情况而言,到目前为止,我可能已经在这方面花费了 5 个多小时,并与同事和其他人详细讨论了这一问题,但尚未发现问题。我无法在单独的代码库上重现。

  • 什么样的事情可能会导致这种情况?
  • 我还可以做些什么来进一步追踪问题?

预先感谢您的任何想法!