observer多线程消费行情模式代码
时间: 2024-01-06 20:55:17 浏览: 59
以下是一个简单的多线程消费行情模式的代码示例,使用了观察者模式:
```python
from threading import Thread
from time import sleep
# 定义一个观察者类
class Observer:
def __init__(self):
self.observers = []
def register(self, observer):
self.observers.append(observer)
def notify(self, data):
for observer in self.observers:
observer.update(data)
# 定义一个行情数据类,继承自观察者类
class MarketData(Observer):
def __init__(self):
super().__init__()
self.data = None
def update(self, data):
self.data = data
def start(self):
# 模拟行情数据不停地更新
while True:
data = get_market_data()
self.notify(data)
sleep(1)
# 定义一个消费者类,继承自观察者类
class Consumer(Observer):
def __init__(self, name):
super().__init__()
self.name = name
def update(self, data):
print(f"{self.name} received data: {data}")
def start(self):
# 模拟消费者不停地处理数据
while True:
sleep(2)
# 模拟获取行情数据的函数
def get_market_data():
return "market data"
# 创建一个行情数据对象
market_data = MarketData()
# 创建两个消费者对象
consumer1 = Consumer("Consumer1")
consumer2 = Consumer("Consumer2")
# 注册消费者对象到行情数据对象中
market_data.register(consumer1)
market_data.register(consumer2)
# 启动行情数据对象和消费者对象
Thread(target=market_data.start).start()
Thread(target=consumer1.start).start()
Thread(target=consumer2.start).start()
```
在上面的代码中,行情数据对象(`MarketData`)继承自观察者类(`Observer`),用于不断地获取最新的行情数据,并将数据通知给所有注册的观察者对象。消费者对象(`Consumer`)同样继承自观察者类,用于接收行情数据,并进行消费处理。在主函数中,我们创建了一个行情数据对象和两个消费者对象,并将消费者对象注册到行情数据对象中。然后,我们启动了三个线程,分别用于启动行情数据对象和两个消费者对象的主要处理函数。这样,当行情数据对象获取到最新的行情数据后,就会通知所有注册的消费者对象,并让他们进行相应的处理。