如何在Python中验证我的线程安全模型?

时间:2012-11-13 16:48:06

标签: python testing thread-safety

我正在研究ddbmock project。基本上,这是一个重现亚马逊DynamoDB API的服务器。

即使这个实现不直接涉及线程,它很可能在多线程环境中运行,而且目前我知道它具有不可预测的“功能”:)所有线程都可以在同一个商店中运行。 ..

第一步是添加互斥锁,但我如何测试我没有错过任何设计实际工作?有可靠的方法吗?

2 个答案:

答案 0 :(得分:3)

观看this,您会发现没有方法可以在CPython中可靠地执行您想要的操作。 这只是因为python将一切推迟到操作系统。它不以任何方式控制(主动)调度,它只是释放GIL,有时让操作系统执行上下文切换 if 时它需要。这对多核计算机有一些难看的后果。

无论如何,在其他语言中,这也是非常难以的事情。调试并发程序是一个地狱,这就是为什么你应该尽可能地避免它(如果你想进行可靠的测试)。

答案 1 :(得分:3)

@martineau,问题不仅限于CPython。只要有共享资源,就会导致并发问题。

一种方法是完全避免它。序列化所有内容并且不允许并发。鉴于这是一个内存模拟服务器,这可能是一个合理的限制。

但是如果你确实想要提供并行访问,那么我使用的策略是在很长一段时间内使用各种请求对系统进行压力测试。这往往会动摇大量的竞争条件错误。否则我知道没有可靠的方法证明程序没有并发错误。