如何评估python模块是否是线程安全的?

时间:2011-09-19 08:07:59

标签: python multithreading thread-safety

嗯,我最初想到的是如何确保pydispatcherpubsub是否是线程安全的。 pubsub可能有点棘手或复杂,但pydispatcher似乎很容易实现。然后我开始想知道如何弄清楚python模块是否是线程安全的。任何启发式方法?

2 个答案:

答案 0 :(得分:2)

为了确定库或应用程序是否是线程安全的,没有作者输入,我会寻找同步线程的机制:http://effbot.org/zone/thread-synchronization.htm 或者它包含线程方法:http://docs.python.org/library/threading.html

但是,这些都不会告诉您如何以线程安全的方式使用API​​。实际上,任何东西都可以填充在线程对象中并与使用线程同步对象进行通信。

对于像pubsub这样的东西,可以创建一个包装API并通过Queues进行通信的类。例如,如果pubsub与wx位于同一个线程中,则可以创建API以使用线程API将消息注入队列以发送消息。然后pubsub循环或计时器可以监视队列。然后它会发送消息。包装像pubsub之类的问题之一就是它需要轮询。如果轮询是由计时器完成的,它可以变得透明。如果pubsub没有驻留在该线程中,则每个线程都必须分配一个计时器来接收消息。可能有更优雅的方法,但我不知道它们。

答案 1 :(得分:1)

从理论的角度来看:没有算法可以为任意程序执行此操作。它就像halting problem

您可以检查已使用的模块并检查这些模块是否被授予线程安全性。但是没有通用的方法来检查模块的字节代码以确保线程安全。