gpt4 book ai didi

函数之间的 Python 信号以消除忙等待

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:19 25 4
gpt4 key购买 nike

我只是想在 Python 中实现一个简单的观察者模式,但遇到了一个问题。这是我的代码:

class Observable:
def __init__(self):
self.__observers = []

def register_observer(self, observer):
self.__observers.append(observer)

def notify_observers(self, data):
for observer in self.__observers:
observer.notify(self, data)

class Observer:

def __init__(self, observable):
observable.register_observer(self)
self.data_present = False
self.data = ''

def notify(self, observable, data):
self.data_present = True
self.data = data

def wait(self):
while True:
if not self.data_present:
time.sleep(5)

else:
break

return self.data

在这里,我想消除 Observer.wait() 中的忙等待(time.sleep(5) 行。我怎样才能向这个函数发出信号?

最佳答案

您根本不需要wait 函数——只需在notify 中执行您需要的操作(处理数据、记录数据、毁伤/旋转/折叠数据,无论如何)。

如果您正在使用线程,请查看 Queue.Queue类:它允许多个线程同步数据可用性而无需忙等待——只需使用 notify 方法将数据推送到 Queue 中,然后 wait 可以等一下。请注意,使用 Threading 中的一些其他功能可能有更优雅的解决方案。模块。

作为旁注,您也不需要在 self.__observers 中使用双下划线——只需 self.observers 即可。

关于函数之间的 Python 信号以消除忙等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31041403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com