[英]What happens with a thread if it's in a infinite while loop python
我在python中找到了有關隊列的這篇文章: http : //www.blog.pythonlibrary.org/2012/08/01/python-concurrency-an-example-of-a-queue/
它工作正常,但我對此有疑問。 在線程的run方法中,我們看到:
def run(self):
while True:
# gets the url from the queue
url = self.queue.get()
# download the file
self.download_file(url)
# send a signal to the queue that the job is done
self.queue.task_done()
線程處於無限while循環中,沒有調用break。 程序結束時該線程會發生什么?
這取決於您所說的“程序結束”。 如果主線程剛剛執行完畢,則有兩種可能性:
如果線程是非守護進程threading.Thread
,則正在運行的線程將無限期保持程序的活動。
如果線程是守護程序,則主線程結束后,線程將突然終止。
daemon
屬性在文檔中的描述如下:
一個布爾值,指示此線程是否是守護線程(真)(假)。 必須在調用start()之前設置此項,否則會引發RuntimeError。 它的初始值是從創建線程繼承的; 主線程不是守護程序線程,因此在主線程中創建的所有線程默認為daemon = False。
當沒有活動的非守護線程時,整個Python程序將退出。
如果通過“程序結束”表示進程獲得SIGTERM或SIGKILL或類似的東西,則線程將與程序的其余部分一起終止,即使該daemon
不是daemon
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.