Nor*_*rus 7 python multithreading sleep
我正在运行以下代码:
from threading import Thread
from time import sleep
def file_write(file_input, num_lines):
sleep(10)
file = open("testfile.txt", "w")
for line in num_lines:
file.write("{}: {}".format(line, file_input))
file.close()
if __name__ == '__main__':
curr_thread = Thread(target=file_write, args=("Norah", range(5)))
curr_thread.daemon = False
curr_thread.start()
Run Code Online (Sandbox Code Playgroud)
期望主线程将立即退出,因为我不调用 join。但事实并非如此。sleep 调用也会阻塞主线程吗?
编辑:此线程中提出了类似的问题:time.sleep - 睡眠线程或进程?但这不一样。
我查看了该线程:它说睡眠不会导致子进程相互阻塞,但它没有说明主线程会发生什么。当我从接受的答案运行代码时,主线程并没有像我想象的那样立即退出。
更新:看起来多线程不能解决我的问题:目标是在后台运行一堆任务。我现在改用 subprocess 模块。
睡眠调用只会阻塞调用它们的线程。在调用后立即在主线程中打印任何内容curr_thread.start()将向您证明这一点。
但是,如果您中断代码 (Ctrl-C),您将看到有用的堆栈跟踪。最后一次调用是在threading模块的_shutdown()方法内部,该方法似乎正在等待所有非守护线程完成。
t = _pickSomeNonDaemonThread()
while t:
t.join()
t = _pickSomeNonDaemonThread()
Run Code Online (Sandbox Code Playgroud)
阅读threading 模块的文档,您可以看到:“当没有存活的非守护线程时,整个 Python 程序就会退出。” 因此,因为您已经完成了curr_thread.daemon = False,所以您将强制主线程首先等待该线程完成。
不过,我应该指出,线程继承了其父级的“守护进程”。由于主线程从来都不是守护线程,因此您可以省略curr_thread.daemon = False, 并且您会得到相同的行为。
| 归档时间: |
|
| 查看次数: |
8691 次 |
| 最近记录: |