为什么Python中没有使用多线程的输出?

为什么Python中没有使用多线程的输出?,python,multithreading,python-3.x,parallel-processing,thread-safety,Python,Multithreading,Python 3.x,Parallel Processing,Thread Safety,我正在读Python编程第四版 以下是代码(Python3.2): 当我运行它时,屏幕上没有输出: $python3 thread-example.py $ 有人对此有想法吗?当主线程退出时,整个进程都会退出 您需要让主线程等待其他线程完成。在\u线程API中没有这方面的规定(它的级别太低了) 如果您愿意使用更好的API,您可以使用threading.Thread.join()。下划线\u表示它是一个私有API(Thread模块自2005年以来已经过时);您应该改用线程模块: from thr

我正在读Python编程第四版

以下是代码(Python3.2):

当我运行它时,屏幕上没有输出:

$python3 thread-example.py
$

有人对此有想法吗?

当主线程退出时,整个进程都会退出

您需要让主线程等待其他线程完成。在
\u线程
API中没有这方面的规定(它的级别太低了)


如果您愿意使用更好的API,您可以使用
threading.Thread.join()

下划线
\u
表示它是一个私有API(
Thread
模块自2005年以来已经过时);您应该改用
线程
模块:

from threading import Thread

# ...
Thread(target=action, args=[2]).start()
Thread(target=lambda: action(2)).start()
Thread(target=obj.action).start()

您不需要显式调用
.join()
方法;在主线程退出之前,非守护进程线程会自动加入。

为什么不使用
线程化
模块(检查)?在您的示例中,主线程在子线程可以打印任何内容之前退出。例如,如果在示例末尾添加以下内容,则“在我的系统上工作”:

import time
time.sleep(5)
但在更复杂的情况下,仍然不能保证在所有子线程退出之前主线程不会退出。您有以下选择:

  • 设置每个子线程的标志,并在退出前继续检查主线程的标志(错误方法)
  • 用于睡眠所有子线程退出所需的最长时间(也是一种糟糕的方法)
  • 用于等待每个孩子退出(好方法)。(从其他答案可以明显看出)
import time
time.sleep(5)