我有一个Python对象,它通过异步I/O回调定期更新。一些线程需要等待此对象被更新。在
这个“更新”事件是一个即时事件,并且告诉等待线程唤醒的操作应该是一个原子事件。在
我已经找到了一些解决方案:
wait
,而不必争着获取锁。在wait
,它将不会等待,相反,事件可以在任何线程被唤醒之前被清除。在最好的解决方案是相当于POSIX pause
/kill
组合,但对于线程(至少是我能想到的最好的解决方案)。在
所以,问题是:
pause
/kill
组合是否具有python2.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
如您所见,每个事件都可以用
wait()
等待事件对象。更重要的是:他们可以定期检查事件(等待超时),然后在循环中执行自己的工作。回调完成后将设置事件。你可以通过一个接一个的检查来组合几个事件,等等。我不能理解你的问题。如果您希望对事件进行独占反应,请使用信号量而不是event:来只允许一个线程/侦听器处理回调完成。查看有关Python线程的更多信息:https://docs.python.org/3/library/threading.html相关问题 更多 >
编程相关推荐