python:等待多个对象(队列、锁、条件等)
我正在使用Python的线程库。运行得很好(当然,这受限于全局解释器锁)。
现在我遇到了一个难题。我有两个不同的并发来源:要么是两个队列,要么是一个队列和一个条件。我该如何等待第一个准备好的对象呢?(它们必须是不同的对象,因为它们属于我应用程序的不同模块部分。)
Windows有一个WaitForMultipleObjects函数;在Python的并发工具中有没有类似的东西呢?
2 个回答
0
你可以创建一个新的同步对象(比如队列、条件等),我们叫它 ready_event。然后为你想要监控的每个同步对象创建一个线程。每个线程都会等待它的同步对象准备好。当某个线程的同步对象准备好了,它就通过 ready_event 发出信号。创建并启动这些线程后,你就可以在 ready_event 上等待了。
0
我知道的没有现成的函数可以直接满足你的需求。不过,有一个叫做 threading.enumerate()
的函数,我觉得它可能会返回一个当前所有守护线程的列表,不管这些线程是从哪里来的。一旦你得到了这个列表,就可以逐个检查,找出你想要的条件。要把一个线程设置为守护线程,每个线程都有一个方法可以调用,比如在线程启动之前用 thread.setDaemon(True)
。
我不能确定这就是你要的答案。我没有你那么多经验,但我查了一本书,叫做《Python标准库示例》,作者是Doug Hellmann。他在关于线程的部分有23页讲解如何管理并发操作,觉得 enumerate
可能会对你有帮助。