[英]Threading in Python - Threads or processes?
如何在python中實現線程? python是否為每個線程創建一個單獨的進程?
考慮這段代碼。
from threading import Thread
from time import sleep
class testThread(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
while True:
print "Thread inner!"
sleep(5)
threadTest = testThread()
threadTest.start()
while True:
print "Thread outer!"
sleep(10)
在shell上運行此代碼,然后執行Ctrl + C時,“Thread outer”打印將停止,但“Thread inner”繼續打印,直到我使用'kill -9 pid'命令手動終止它。
在Linux上,每個線程都是一個線程,而不是一個單獨的進程。 使用ps
查看腳本運行時啟動的進程,您將看到一個python進程。
線程模塊的文檔說明:
線程可以標記為“守護程序線程”。 這個標志的意義在於,當只剩下守護進程線程時,整個Python程序都會退出。 初始值繼承自創建線程。 可以通過守護程序屬性設置該標志。
...
有一個“主線程”對象; 這對應於Python程序中的初始控制線程。 它不是守護程序線程。
在行之間讀取,整個Python程序僅在所有非守護程序線程(包括主線程)退出時退出。
線程不是單獨的進程。 它們與主線程共享相同的資源。 發生的事情是Python在退出之前等待所有線程完成運行。
如果您希望在主進程退出后退出Python,請守護所有其他線程。 你可以這樣做:
...
threadTest.daemon = True
threadTest.start()
...
這適用於非常基本的線程。 但是,根據文檔(上面鏈接):
守護程序線程在關閉時突然停止。 他們的資源(例如打開文件,數據庫事務等)可能無法正確發布。 如果您希望線程正常停止,請將它們設置為非守護進程並使用合適的信號機制(如Event)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.