用Python制作多线程卖票
时间: 2024-11-30 14:28:58 浏览: 15
在Python中,我们可以使用`threading`模块来创建多线程来模拟并发售票的过程。这里是一个简单的例子,假设我们有一个函数用于处理购票请求:
```python
import threading
# 假设这是我们的虚拟票务系统
class TicketSystem:
def __init__(self):
self.tickets = 100 # 初始化库存100张票
self.lock = threading.Lock() # 互斥锁保证数据同步
def check_tickets(self):
if not self.has_tickets():
return "对不起,票已售罄"
# 使用锁保护数据操作,防止竞态条件
with self.lock:
if self.has_tickets():
self.tickets -= 1
return f"购买成功,剩余{self.tickets}张票"
def has_tickets(self):
return self.tickets > 0
# 创建一个TicketSystem实例
ticket_system = TicketSystem()
# 卖票函数,每个线程代表一个顾客
def buy_ticket(name):
while True:
result = ticket_system.check_tickets()
if result == None:
break
print(f"{name}: {result}")
# 创建并启动几个卖票线程
threads = [threading.Thread(target=buy_ticket, args=("顾客", i)) for i in range(5)]
for t in threads:
t.start()
# 等待所有线程完成
for t in threads:
t.join()
```
在这个例子中,`check_tickets`方法被放在了各自的线程中并发地调用,每个线程都尝试购买票。通过互斥锁,我们确保了在任何时候只有一个线程能修改库存,避免了数据竞争。
阅读全文