gpt4 book ai didi

python - Time.sleep 似乎阻塞了主线程,而不仅仅是子线程?

转载 作者:行者123 更新时间:2023-12-01 04:46:22 35 4
gpt4 key购买 nike

我正在运行以下代码:

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()

期望是主线程将立即退出,因为我不调用join。但事实并非如此。 sleep 调用也会阻塞主线程吗?

编辑:在这个线程中有一个类似的问题: time.sleep -- sleeps thread or process?但不一样。
我查看了线程:它说 sleep 不会导致子进程相互阻塞,但它没有说明主线程会发生什么。当我从接受的答案运行代码时,主线程并没有像我想的那样立即退出。

更新:看起来多线程无法解决我的问题:目的是在后台运行一堆任务。我现在正在使用 subprocess 模块。

最佳答案

sleep 调用只会阻塞调用它们的线程。在调用 curr_thread.start() 后立即在主线程中打印任何内容会向你证明这一点。

但是,如果您中断代码 (Ctrl-C),您将看到有用的堆栈跟踪。最后一次调用在 threading 内模块的_shutdown()方法,它似乎正在等待所有非守护线程完成。

t = _pickSomeNonDaemonThread()
while t:
t.join()
t = _pickSomeNonDaemonThread()

并阅读 the documentation对于线程模块,您可以看到:“当没有存活的非守护线程时,整个 Python 程序退出。”所以,因为你已经完成了 curr_thread.daemon = False ,您正在强制主线程等待该线程首先完成。

不过,我应该指出,线程继承了它们 parent 的“守护进程”。由于主线程从来都不是守护线程,因此您可以省略 curr_thread.daemon = False ,你会得到相同的行为。

关于python - Time.sleep 似乎阻塞了主线程,而不仅仅是子线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46350643/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com