我正在使用python 2.7。我正在使用multi -threading.Now如果一个线程再次死了我 创建一个来补偿它。所以我应该先预先创建很多线程并存储它们 当一个或多个现有线程死亡时使用它们,或者当某个线程死亡时我应该创建一个线程吗? 哪个在时间上更有效率?
答案 0 :(得分:2)
当你说线程“死亡”时,你的意思是你是故意终止它还是由于错误而失败了?
如果你故意终止它并且你担心产生一个新线程所需的时间,那么为什么不保持线程持久化并让它完成新线程所做的工作呢?这是一种非常标准的方法 - 维护一个“工作”线程池,并有一个工作队列来执行待处理的项目。它们都运行一个相同的循环,即将一个项目从队列中拉出并执行它。这些项可以是包含要执行的代码的方法的对象,如果方便的话那样 - 如果任务非常相似,那么将代码放入线程自己的函数可能更容易。
如果你在谈论线程由于错误而失败,我不会想到这是常见的担心它。如果是,您可能需要考虑使代码更加健壮。
在任何一种情况下,在大多数系统上生成一个线程应该是一个轻量级的活动 - 例如,比产生一个全新的进程要轻得多。因此,我真的不担心保留一个线程池供使用 - 这听起来像是对我的早期优化。
即使产生线程很慢,也要考虑提前产生线程会做什么 - 你会占用更多内存(操作系统中的一些内存用于跟踪线程,一些用于Python的对象,它用来跟踪线程),虽然不是很多;你也会花更多的时间在程序的开头创建所有这些线程。因此,您可能会在运行时节省一些时间,但是您的程序开始时需要更长的时间。这对我来说听起来不是一个合理的权衡,除非你的代码的速度和延迟在它运行时是绝对关键的,如果速度是那么关键,那么我不确定纯Python解决方案是否正确。像C / C ++这样的东西可以让你更好地控制调度,但代价是更复杂。
总结:严重的是,不要担心,只需在需要时生成线程。相信我,你的代码中的其他地方会有更大的速度问题,这些问题更值得花时间。