【发布时间】:2017-05-30 07:33:47
【问题描述】:
我有一个通过异步 I/O 回调定期更新的 Python 对象。有几个线程需要等待这个对象被更新。
这个“更新”事件是一个瞬时事件,通知等待线程唤醒的动作也应该是一个原子动作。
我已经寻找了一些解决方案:
- 条件对象需要您先获取锁,这是行不通的:我需要多个线程才能畅通无阻地到达
wait,而无需争取获取锁。 - 事件对象产生竞争条件:如果一个线程在事件被清除之前到达
wait,它不会等待,相反,事件可以在任何线程被唤醒之前被清除。
最好的解决方案相当于 POSIX pause/kill 组合,但对于线程(至少是我能想到的最好的)。
所以,问题:
-
pause/kill组合是否具有 Python 2.7 线程的等效项,哪一个? - 如果不是,对于我的用例,使用 Python 2.7 标准库的最佳折衷方案是什么(就可靠性而言)?
这与我想要实现的目标类似:
# Would be a derived of threading.Event
# and the perfect solution for me, if it existed
ev = InstantEvent()
def update(*args):
# do stuff with args
ev.notifyAll()
if __name__ == "__main__":
# do startup stuff
ev.wait()
# do more stuff
【问题讨论】:
标签: python multithreading python-2.7 thread-synchronization