我正在阅读Programming Python第4版。
以下是代码(Python3.2):
import _thread
def action(i):
print(i ** 32)
class Power:
def __init__(self, i):
self.i = i
def action(self):
print(self.i ** 32)
_thread.start_new_thread(action,(2,))
_thread.start_new_thread((lambda: action(2)), ())
obj = Power(2)
_thread.start_new_thread(obj.action,())
当我运行它时,屏幕上没有输出:
$python3 thread-example.py
$
有没有人有这方面的想法?
答案 0 :(得分:1)
当主线程退出时,整个过程退出。
您需要让主线程等待,直到其他线程完成。 _thread
API中没有这方面的规定(它是如此低级别)。
如果您愿意使用更好的API,则可以使用threading.Thread.join()
。
答案 1 :(得分:1)
下划线_
表示它是一个私有API(thread
模块自2005年以来已经过时);你应该使用threading
模块:
from threading import Thread
# ...
Thread(target=action, args=[2]).start()
Thread(target=lambda: action(2)).start()
Thread(target=obj.action).start()
您无需明确调用.join()
方法;非守护程序线程在主线程退出之前自动连接。
答案 2 :(得分:0)
为什么不使用threading
模块(检查here)?在您的示例中,主线程在子线程可以打印任何内容之前退出。例如,如果您在示例的末尾添加以下内容,则可以在我的系统上运行:
import time
time.sleep(5)
但是仍然无法保证在更复杂的情况下所有子线程退出之前主线程不会退出。您有以下选择:
time.sleep
睡眠所有子线程可以退出的最长时间(也是一种糟糕的方法)。threading.Thread.join
等待每个孩子退出(好的方法)。 (从其他答案中可以看出)