0
我有一个从异步I/O回调中定期更新的Python对象。有几个线程需要等待这个对象被更新。一次唤醒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