代码之家  ›  专栏  ›  技术社区  ›  Igor Serebryany

python线程的显式连接?

  •  2
  • Igor Serebryany  · 技术社区  · 16 年前

    我需要在Python程序中启动一些线程。线程执行后台任务可能需要很长时间,因此我不想阻止等待任务发生的主线程。

    python提供了使用thread.join()和thread.isalive()来“获取”线程的功能。但我实际上并不关心什么时候线结束了。我满足于启动线程,让它做它的事情,再也不用担心它了。

    问题是,我是否需要保留对我启动的线程对象的引用,以便稍后连接()它们?或者我可以让对线程对象的引用超出范围而不担心它吗?在这种情况下,是否有“正确”的做法?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Alex Martelli    16 年前

    你不必明确 join 线程——只需确保它们没有“后台监控”(保留它们的 daemon 属性为默认值, False )因此,它们将使进程保持活动状态,直到它们全部完成(如果您创建线程守护进程,那么必须确保主线程在所有相关线程完成之前不会终止,否则线程将被操作系统杀死)。

    我认为正确的事情是最简单的:忘记你的“后台线程”,让它们成为非守护进程(这毕竟是它们的默认状态)。