python:等待多个对象(队列、锁、条件等)

5 投票
2 回答
2169 浏览
提问于 2025-04-18 00:43

我正在使用Python的线程库。运行得很好(当然,这受限于全局解释器锁)。

现在我遇到了一个难题。我有两个不同的并发来源:要么是两个队列,要么是一个队列和一个条件我该如何等待第一个准备好的对象呢?(它们必须是不同的对象,因为它们属于我应用程序的不同模块部分。)

Windows有一个WaitForMultipleObjects函数;在Python的并发工具中有没有类似的东西呢?

2 个回答

0

你可以创建一个新的同步对象(比如队列、条件等),我们叫它 ready_event。然后为你想要监控的每个同步对象创建一个线程。每个线程都会等待它的同步对象准备好。当某个线程的同步对象准备好了,它就通过 ready_event 发出信号。创建并启动这些线程后,你就可以在 ready_event 上等待了。

0

我知道的没有现成的函数可以直接满足你的需求。不过,有一个叫做 threading.enumerate() 的函数,我觉得它可能会返回一个当前所有守护线程的列表,不管这些线程是从哪里来的。一旦你得到了这个列表,就可以逐个检查,找出你想要的条件。要把一个线程设置为守护线程,每个线程都有一个方法可以调用,比如在线程启动之前用 thread.setDaemon(True)

我不能确定这就是你要的答案。我没有你那么多经验,但我查了一本书,叫做《Python标准库示例》,作者是Doug Hellmann。他在关于线程的部分有23页讲解如何管理并发操作,觉得 enumerate 可能会对你有帮助。

撰写回答