0

我正在使用python 2.7。我正在使用多线程。现在如果一个线程死了,我会再次创建一个来补偿它。所以我应该事先创建很多线程并存储它们并在一个或多个现有线程时使用它们死了还是应该在某个线程死时创建一个?
哪个在时间方面更有效?

4

1 回答 1

2

当你说一个线程“死亡”时,你的意思是你故意终止它还是因为错误而失败?

如果您有意终止它并且您担心生成新线程所需的时间,为什么不保持线程持久并简单地让它完成新线程会完成的工作呢?这是一种非常标准的方法——维护一个“工作”线程池,并有一个工作队列,其中包含待执行的项目。它们都运行一个相同的循环,即从队列中拉出一个项目并执行它。这些项目可以是具有包含要执行的代码的方法的对象,如果以这种方式工作的话 - 如果任务都非常相似,那么将代码放入线程自己的函数可能会更容易。

如果您在谈论由于错误导致线程失败,我不会想到这很常见以至于担心它。如果是这样,您可能需要考虑使您的代码更健壮。

在任何一种情况下,在大多数系统上生成线程都应该是一个轻量级的活动——例如,比生成一个全新的进程要轻得多。因此,我真的不用担心保留一个线程池以供使用——这对我来说听起来确实像是早期的优化。

即使生成线程很慢,请考虑通过提前生成线程来执行的操作 - 您将占用更多内存(操作系统中的一些内存用于跟踪线程,Python 中的一些内存用于它使用的对象跟踪线程),虽然不是很多;您还将在程序开始时花费更多时间来创建所有这些线程。因此,您可能会在运行时节省一点时间,但您的程序需要更长的时间才能启动。对我来说,这听起来不是一个明智的权衡,除非你的代码在运行时的速度和延迟是绝对关键的,如果速度如此关键,那么我不确定纯 Python 解决方案是否是正确的方法。像 C/C++ 这样的东西会让你更好地控制调度,但代价是更加复杂。

总结:说真的,不用担心,只需根据需要生成线程即可。相信我,你的代码中其他地方会有更大的速度问题,这更值得你花时间。

于 2013-07-02T11:16:33.317 回答