JList、JComboBox實現列表框 無論從哪個角度來看, JList 和 JComboBox 都是極其相似的,它們都有一個列表框,只是 JComboBox的列表框需要 以下拉方式顯示出來; JList 和 JComboBox 都可以通過調用 setRendererO方法來改變列表項的表現形式 ...
解決問題場景:假如剩餘1000張電影票需要售賣,同時有10家電影App來售賣這1000張電影票。主要的邏輯實現過程是什麼,要求使用python技術棧進行解題?
1、分析過程
分析:主要信息點是10家App平臺同時售賣1000張電影票。此時,可以使用10個python線程來作為10家App平臺,同時售賣必須保證電影票數量的同步,比如A平臺賣出了一張票那總共剩餘的票數是999,B平臺若要再賣出一張票則應該是999-1=998張票。
技術棧分析:python多線程提供了threading模塊,並且threading模塊提供了同步鎖Lock來控制使得票數達到統一的效果。
2、準備過程
將相關的標準庫導入到代碼塊中,不用額外安裝其他的非標準庫。
import threading # 多線程相關的操作
import os # 應用退出操作
import time # 線程中時間阻塞的控制
初始化一些全局參數,供後面調用過程中使用。
tickets = 1000 # 初始化電影票的總數為1000張
lock_ = threading.Lock() # 獲取一個同步鎖對象,用於在多線程邏輯中實現鎖的控制
3、實現過程
編寫一個函數sell_tickets作為售票的函數實現過程。
def sell_tickets(app_name='承擔電影票售票任務App平臺'):
global tickets # 將這些電影票作為全局變數
global lock_ # 將獲取到的鎖對象作為全局變數
# 使用一個死迴圈來模擬當前的售票平臺一直在售票
while True:
lock_.acquire() # 每個售票平臺進入售票後先加鎖處理
if tickets > 0: # 開始售票之前先判斷電影票的數量是否已經售完
tickets = tickets - 1
print('當前售票平臺:{},賣出一張電影票,剩餘電影票:{}張!'.format(app_name, tickets))
time.sleep(0.1)
else:
print('電影票已經全部賣完了!')
os._exit(0)
lock_.release() # 處理完成售票業務後將鎖釋放
time.sleep(0.2)
至此,電影票售票的業務邏輯就寫完了。下麵再通過多線程實現多個電影票出售平臺同時售票就OK了。
app_thread_1 = threading.Thread(target=sell_tickets, args=('售票App平臺01',))
app_thread_1.start()
app_thread_2 = threading.Thread(target=sell_tickets, args=('售票App平臺02',))
app_thread_2.start()
app_thread_3 = threading.Thread(target=sell_tickets, args=('售票App平臺03',))
app_thread_3.start()
app_thread_4 = threading.Thread(target=sell_tickets, args=('售票App平臺04',))
app_thread_4.start()
app_thread_5 = threading.Thread(target=sell_tickets, args=('售票App平臺05',))
app_thread_5.start()
app_thread_6 = threading.Thread(target=sell_tickets, args=('售票App平臺06',))
app_thread_6.start()
app_thread_7 = threading.Thread(target=sell_tickets, args=('售票App平臺07',))
app_thread_7.start()
app_thread_8 = threading.Thread(target=sell_tickets, args=('售票App平臺08',))
app_thread_8.start()
app_thread_9 = threading.Thread(target=sell_tickets, args=('售票App平臺09',))
app_thread_9.start()
app_thread_10 = threading.Thread(target=sell_tickets, args=('售票App平臺10',))
app_thread_10.start()
【往期精彩】
發現幾個好玩的游戲編程平臺,與君共勉!
python四個性能檢測工具,包括函數的運行記憶體、時間等等...
如何將多張圖片合成mp4視頻格式,並加入背景音樂...
python如何實現網路測試,瞭解一下speedtest-cli...
模型已經寫好了,怎麼表白就看你的了!
歡迎關註作者公眾號【Python 集中營】,專註於後端編程,每天更新技術乾貨,不定時分享各類資料!