你能帮我改写一下吗?
时间: 2024-02-18 19:58:54 浏览: 26
当然可以,下面是一个参考的改写版本:
```
import threading
import time
class SenderThread(threading.Thread):
def __init__(self, name, receiver, messages):
super().__init__()
self.name = name
self.receiver = receiver
self.messages = messages
self.running = False
def run(self):
while True:
if self.running:
if self.messages:
message = self.messages.pop(0)
self.receiver.receive(self.name, message)
time.sleep(0.1)
class ReceiverThread(threading.Thread):
def __init__(self):
super().__init__()
self.messages = []
def receive(self, sender, message):
self.messages.append((sender, message))
def run(self):
while True:
if self.messages:
sender, message = self.messages.pop(0)
print(f"{sender}: {message}")
time.sleep(0.1)
if __name__ == "__main__":
receiver = ReceiverThread()
sender1 = SenderThread("Sender 1", receiver, ["Hello", "World"])
sender2 = SenderThread("Sender 2", receiver, ["Foo", "Bar"])
sender3 = SenderThread("Sender 3", receiver, ["Fizz", "Buzz"])
sender1.start()
sender2.start()
sender3.start()
receiver.start()
# Allow some time for threads to start
time.sleep(2)
# Start sending messages
sender1.running = True
time.sleep(2)
sender2.running = True
time.sleep(2)
sender3.running = True
# Wait for receiver to finish
receiver.join()
```
这个版本中,我们使用了一个队列来存储发送者线程发送的消息,接收者线程从队列中取出消息进行处理。每个发送者线程都会循环运行,当其 running 属性被设置为 True 时,会从自己的消息列表中取出一条消息,并将其发送给接收者线程。接收者线程循环运行,从队列中取出消息并进行处理。这种方式可以保证每个线程都有机会发送消息,不会出现阻塞的情况。