我正试图编写一个非常基本的模拟器,客户端随机到达时间到达,然后停留一段随机时间,然后再次离开。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