我有一个Python对象,它定期从异步I / O回调中更新。一些线程需要等待更新此对象。
这"更新" event是一个瞬时事件,并且告诉等待线程唤醒的动作应该是原子事件。
我找了几个解决方案:
wait
,而不需要争取锁定。wait
,则它不会等待,相反,事件可以在任何线程被唤醒之前被清除。 / LI>
最好的解决方案是等同于POSIX pause
/ kill
组合,但对于线程(至少是我能想到的最好的)。
所以,问题:
pause
/ kill
组合是否具有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
答案 0 :(得分:0)
如您所见,每个事件都可以在wait()
的Event对象上等待。甚至更多:他们可以定期检查事件(等待超时)然后在循环中做自己的工作。回调将在完成时设置事件。你可以通过检查一个然后另一个等来组合几个事件。我无法理解你的问题。如果你想对事件做出独占反应 - 使用信号量而不是事件:只允许一个线程/监听器处理回调完成。查看有关Python线程的更多信息:https://docs.python.org/3/library/threading.html