Multithreading 我是否应该提前创建线程以节省时间?

Multithreading 我是否应该提前创建线程以节省时间?,multithreading,python-2.7,Multithreading,Python 2.7,我使用的是Python2.7。我使用的是多线程。现在,如果一个线程死掉,我将再次使用它 创建一个线程来补偿它。所以我应该在手之前创建很多线程并存储它们吗 当一个或多个现有线程死亡时使用它们,或者当一些线程死亡时我应该创建一个吗?? 在时间方面,哪个更有效???当你说一个线程“死了”时,你的意思是你故意终止它还是因为错误而失败 如果您有意终止它,并且担心生成新线程所需的时间,为什么不保持线程的持久性,让它完成新线程应该完成的工作呢?这是一种非常标准的方法——维护一个“工作”线程池,并有一个包含待执

我使用的是Python2.7。我使用的是多线程。现在,如果一个线程死掉,我将再次使用它 创建一个线程来补偿它。所以我应该在手之前创建很多线程并存储它们吗 当一个或多个现有线程死亡时使用它们,或者当一些线程死亡时我应该创建一个吗??
在时间方面,哪个更有效???

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

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

如果您谈论的是由于错误导致的线程失败,我不会想到这是一种常见的情况,足以让人担心。如果是的话,您可能需要考虑使代码更加健壮

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

即使产卵线程很慢,也要考虑通过预先生成线程来做什么——你将占用更多的内存(OS中的一些内存来跟踪线程,一些在Python中用于跟踪线程的对象),虽然不是很大;在程序开始创建所有这些线程时,您也会花费更多的时间。因此,您可能会在运行时节省一些时间,但相反,您的程序启动所需的时间要长得多。对我来说,这听起来不是一个明智的权衡,除非代码在运行时的速度和延迟是绝对关键的,如果速度如此关键,那么我不确定纯Python解决方案是否是正确的方法。类似于C/C++的东西将让您更好地控制调度,但代价是要复杂得多


总之:说真的,别担心,只要根据需要生成线程就行了。相信我,在你的代码中,其他地方会有更大的速度问题,这更值得你花时间。

@不,它会因自身的一些异常而消亡。我不会破坏它的安全,欢迎你。你知道你总能捕捉到异常,对吗?因此,您可以有一个外部循环,例如,将工作项从队列中取出,并在
try…块中调用它们。如果这是一个长时间运行的守护进程,那么您可以记录该异常(始终对长时间运行的守护进程使用日志记录!),然后继续执行下一项。即使您不想处理异常(这是一个偏好问题),我仍然建议您至少捕获、记录并重新引发异常。没有什么比不记录日志的守护进程更烦人的了。(^_^)