如何判断一个python模块是否是线程安全的?

发布于 2024-12-05 01:46:32 字数 249 浏览 0 评论 0原文

好吧,我首先想到的是如何确定 pydispatcherpydispatcher。 net/">pubsub 是否是线程安全的。 pubsub 可能有点棘手或复杂,但 pydispatcher 似乎很容易实现。然后我开始想知道如何确定 python 模块是否线程安全。有什么启发吗?

Well, the initial thing to my mind was how to make sure if pydispatcher or pubsub is thread-safe or not. pubsub might be a little tricky or complex to figure out but pydispatcher seems simple to realize. Then I started to wonder how to figure out if a python module thread-safe or not. Any heuristics?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仄言 2024-12-12 01:46:32

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

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

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

For determining if a library or application is thread safe, without author input, I would look for mechanisms for synchronizing threads: http://effbot.org/zone/thread-synchronization.htm
or that it contains threading methods: http://docs.python.org/library/threading.html

However, none of that will tell you how to use the API in a thread safe manner. Practically anything can be stuffed inside a thread object and communicated to using thread synchronization objects.

For something like pubsub one could create a class that wraps the API and communicates over Queues exclusively. If pubsub lived in the same thread as wx for example, then an API could be created to inject messages into the Queue using a threading API for sending messages. Then a pubsub loop or timer could be monitoring the Queue. It would then send out messages. One of the issues with wrapping something like pubsub is that somewhere it will require polling. It could be made transparent if the polling were done by timers. Each thread would have to allocate a timer to receive messages if pubsub did not reside in that thread. There might be more elegant approaches to this, but I am not aware of them.

穿透光 2024-12-12 01:46:32

从理论角度来看:没有任何算法可以对任意程序执行此操作。这就像停止问题

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

From a theoretic point of view: There is no algorithm which does this for an arbitrary program. It is like the halting problem.

You can inspect the used modules and check if these are granted to be thread safe. But there is no general way to check the byte code of a module for thread safety.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文