【发布时间】:2018-08-30 15:24:02
【问题描述】:
来自documentation,特别是这部分:
这会阻塞调用线程,直到其 join() 方法为 调用终止 - 正常或通过未处理的异常 – 或直到发生可选超时。
我收集到当timeout 不是None 时,调用线程应该等待守护进程,即退出前的这段时间(如果其他非守护线程完成工作)。虽然,这个例子证明不同,所以我的理解是不正确的:
import threading
import time
import logging
def daemon():
logging.debug('Starting')
time.sleep(10)
logging.debug('Exiting')
def non_daemon():
logging.debug('Starting')
logging.debug('Exiting')
logging.basicConfig(
level=logging.DEBUG,
format='(%(threadName)-10s) %(message)s',
)
d = threading.Thread(name='daemon', target=daemon, daemon=True)
t = threading.Thread(name='non-daemon', target=non_daemon)
d.start()
t.start()
d.join(0.3)
print('d.isAlive()', d.isAlive())
t.join()
谁能给我解释一下,为什么调用线程(主线程)在等待守护线程0.3秒后没有退出?而是等待完整的10 秒?显然我不明白超时参数的含义。我在网上找到的所有解释都是一样的,基本上都是这样说的:
也可以传递一个浮点数来表示 等待线程变为非活动状态的秒数。如果线程确实 在超时时间内未完成,join() 无论如何都会返回。
,这对我来说毫无意义。
谢谢
【问题讨论】: