python多线程3个窗口售票名字分别是window1、window2、window3,窗口之间共享一个票池,每个窗口都可以卖票直到票池里面没有票可以卖,初始票数是50张。
时间: 2023-12-03 12:42:43 浏览: 87
python3+PyQt5+Qt Designer实现堆叠窗口部件
可以使用 Python 中的 threading 模块来实现多线程售票系统。在主线程中创建一个共享资源——票池,然后创建三个线程,分别代表三个售票窗口。每个线程都会不断从票池中取出一张票进行售卖,直到票池为空为止。
下面是一个可能的实现:
```python
import threading
# 共享资源:票池
ticket_pool = 50
# 售票函数
def sell_tickets(window_name):
global ticket_pool
while True:
# 加锁,保证线程安全
lock.acquire()
if ticket_pool > 0:
ticket_pool -= 1
print(f"{window_name} 售出一张票,余票 {ticket_pool} 张")
else:
print(f"{window_name} 票已售罄")
# 释放锁
lock.release()
break
# 释放锁
lock.release()
if __name__ == '__main__':
# 创建锁
lock = threading.Lock()
# 创建线程
t1 = threading.Thread(target=sell_tickets, args=("window1",))
t2 = threading.Thread(target=sell_tickets, args=("window2",))
t3 = threading.Thread(target=sell_tickets, args=("window3",))
# 启动线程
t1.start()
t2.start()
t3.start()
# 等待线程结束
t1.join()
t2.join()
t3.join()
print("所有票已售罄")
```
在上面的代码中,我们使用了 threading.Lock() 创建了一个锁,以保证线程安全。每个线程在执行售票函数 sell_tickets() 时,会首先尝试获取锁,如果成功获取锁,则可以继续执行售票操作,否则会阻塞等待锁的释放。
当票池为空时,线程会释放锁并退出售票循环,结束线程。
最后,我们在主线程中启动三个售票窗口的线程,并等待它们执行完毕后再输出所有票已售罄的信息。
阅读全文