多线程callable 实现卖票
时间: 2023-10-21 18:15:11 浏览: 133
多线程 售票系统
下面是一个基于多线程和callable实现卖票的示例代码:
```python
import threading
class TicketSeller:
def __init__(self, num_tickets):
self.num_tickets = num_tickets
self.lock = threading.Lock()
def sell(self):
with self.lock:
if self.num_tickets > 0:
print("Sell ticket: ", threading.current_thread().name)
self.num_tickets -= 1
return True
else:
print("Sold out!")
return False
def sell_tickets(ticket_seller):
while ticket_seller.sell():
pass
if __name__ == '__main__':
num_tickets = 20
ticket_seller = TicketSeller(num_tickets)
threads = []
for i in range(4):
threads.append(threading.Thread(target=sell_tickets, args=(ticket_seller,), name=f'Thread-{i+1}'))
for thread in threads:
thread.start()
for thread in threads:
thread.join()
print("All tickets sold out!")
```
该示例代码中,定义了一个TicketSeller类,负责实现售票的逻辑。在该类中使用了一个Lock对象(即self.lock)来保证线程安全。sell()方法用来卖票,如果还有票就售出一张并返回True,否则返回False。
在主程序中,创建了4个线程,每个线程都调用sell_tickets()函数,该函数接受一个TicketSeller对象作为参数,并在循环中调用该对象的sell()方法来售票。如果sell()方法返回False,就退出循环,否则继续循环。最后,使用join()方法等待所有线程执行完毕,然后输出所有票都已售罄的提示。
阅读全文