python 多线程同步_Python利用多线程同步锁实现多窗口订票系统(推荐)
利用Python實(shí)現(xiàn)多窗口訂票系統(tǒng),利用
threading.Lock()
避免出現(xiàn)一票多賣,無票也賣的情況,并規(guī)范化輸出情況。
代碼:
import threading
import time
tickets, lock = 20, threading.Lock()
class TicketWindows(threading.Thread):
def __init__(self, window_name):
threading.Thread.__init__(self)
self.window_name = window_name
def run(self):
sell_tickets(self.window_name)
def sell_tickets(threadName):
global tickets
while tickets > 0:
lock.acquire() # 加一個同步鎖,類似Java中的synchronized
if tickets > 0:
print(threadName, "準(zhǔn)備出票,還剩余票:", tickets, "張")
tickets -= 1
print(threadName, "賣出1張車票,還剩:", tickets, "張")
print("----------------------------------")
else:
print("車票售空!")
lock.release() # 釋放同步鎖
try:
time.sleep(1)
except RuntimeError:
print("error!")
if __name__ == "__main__":
window1 = TicketWindows("窗口1")
window2 = TicketWindows("窗口2")
window3 = TicketWindows("窗口3")
window1.start()
window2.start()
window3.start()
window1.join()
window2.join()
window3.join()
print("退出主線程")
輸出:
窗口1 準(zhǔn)備出票,還剩余票: 20 張
窗口1 賣出1張車票,還剩: 19 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 19 張
窗口2 賣出1張車票,還剩: 18 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 18 張
窗口3 賣出1張車票,還剩: 17 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 17 張
窗口2 賣出1張車票,還剩: 16 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 16 張
窗口3 賣出1張車票,還剩: 15 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 15 張
窗口1 賣出1張車票,還剩: 14 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 14 張
窗口3 賣出1張車票,還剩: 13 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 13 張
窗口1 賣出1張車票,還剩: 12 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 12 張
窗口2 賣出1張車票,還剩: 11 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 11 張
窗口1 賣出1張車票,還剩: 10 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 10 張
窗口3 賣出1張車票,還剩: 9 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 9 張
窗口2 賣出1張車票,還剩: 8 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 8 張
窗口1 賣出1張車票,還剩: 7 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 7 張
窗口3 賣出1張車票,還剩: 6 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 6 張
窗口2 賣出1張車票,還剩: 5 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 5 張
窗口1 賣出1張車票,還剩: 4 張
----------------------------------
窗口2 準(zhǔn)備出票,還剩余票: 4 張
窗口2 賣出1張車票,還剩: 3 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 3 張
窗口3 賣出1張車票,還剩: 2 張
----------------------------------
窗口1 準(zhǔn)備出票,還剩余票: 2 張
窗口1 賣出1張車票,還剩: 1 張
----------------------------------
窗口3 準(zhǔn)備出票,還剩余票: 1 張
窗口3 賣出1張車票,還剩: 0 張
----------------------------------
車票售空!
退出主線程
注意:使用?synchronized 修飾run()方法是無效的!這會導(dǎo)致自始至終只有一個窗口進(jìn)行賣票操作!
總結(jié)
以上所述是小編給大家介紹的Python利用多線程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng),希望對大家有所幫助!
總結(jié)
以上是生活随笔為你收集整理的python 多线程同步_Python利用多线程同步锁实现多窗口订票系统(推荐)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【阿佳说】打造抖音个人IP实现利润翻倍
- 下一篇: 智能系统课件@丛爽老师-中国科学技术大学