我正試圖編寫一個非常基本的模擬器,客戶端隨機到達時間到達,然後停留一段隨機時間,然後再次離開。Python多線程:產生多個線程,只執行最後一個執行
這個想法是,每次生成客戶端時,會在隨機時間後刪除客戶端(請參閱delete_user()函數)後生成一個單獨的線程。
def delete_user(user):
time.sleep(random.randint(5,20))
print "User %s left at %s" % (user.id, time.ctime())
def start_simulation(number_users, interval):
for i in range(number_users):
t = random.expovariate(1.0/interval)
time.sleep(t) # wait random time before generating a new user
user = generate_user()
print "User %s generated at %s" % (user.id, time.ctime())
worker = threading.Thread(target=delete_user, args=(user,))
worker.start()
問題是,delete_user()只執行一次,對於生成的最後一個用戶。似乎只有最後產生的線程實際上做了某些事情。
這是輸出:
User b490fbd0-8740-4d7e-a3a6-d46449ff918b generated at Wed Apr 1 07:22:47 2015
User 844122d9-4032-4866-9e07-eb86f076a531 generated at Wed Apr 1 07:22:49 2015
User 91e238fc-4ed1-4a81-a434-9a50d3b01fed generated at Wed Apr 1 07:22:52 2015
User 877c8e3f-2b3d-4997-9644-98d078388427 generated at Wed Apr 1 07:22:52 2015
User a77dcefc-8ea1-467d-8365-923b789ab4bb generated at Wed Apr 1 07:22:54 2015
User a77dcefc-8ea1-467d-8365-923b789ab4bb left at Wed Apr 1 07:23:02 2015
我俯瞰的東西嗎?還是有更簡單的方法來實現我需要的相同功能?
感謝
難道你們就不能只是隨機繪製的開始時間和時間的長短,他們都存在然後隨着時間的推移而循環,這將執行當時發生的任何操作? – user2539336 2015-04-01 14:43:14
是的,我正在考慮做那樣的事情。但是,對於'隨着時間的流逝'來說,你究竟意味着什麼?你是說我應該睡一秒,醒來,檢查是否應該完成一個事件,然後再睡一會兒? – HaS 2015-04-01 14:52:23
這將是一種方法來做到這一點(當然我在想什麼),但一個快速谷歌已經出現這個:https://docs.python.org/2/library/sched.html,我認爲幾乎你想要的東西 – user2539336 2015-04-01 14:54:23