2013-03-25 80 views
0

python如何實現線程? 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) 

在外殼上運行此代碼,然後做一個CTRL + C「線程外」打印停止來,然而,「螺紋內徑」繼續得到印刷直到我手動殺死它使用「殺死-9 pid'命令。

+1

將線程設置爲守護進程 – JBernardo 2013-03-25 23:19:32

回答

1

每個線程在Linux上是一個線程,而不是一個單獨的進程。使用ps來查看腳本運行時啓動的進程,並且您將看到一個單獨的python進程。

threading module筆記的文檔:

線程可以被標記爲「守護線程」。這個 標誌的意義在於,只有守護程序線程 剩下時,整個Python程序纔會退出。初始值是從創建線程繼承的。 標誌可以通過守護進程屬性設置。

...

有一個「主線程」對象;這對應於Python程序中最初的 控制線程。它不是一個守護線程。

在行之間讀取時,整個Python程序僅在所有非守護線程(包括主線程)退出時退出。

+0

謝謝!這工作。 – CPS 2013-03-25 23:56:23

1

線程不是單獨的進程。它們與主線程共享相同的資源。發生什麼事是Python在退出之前等待所有線程完成運行。

如果您希望在主進程退出後退出Python,則所有其他線程都退出daemonize。你可以這樣做:

... 
threadTest.daemon = True 
threadTest.start() 
... 

這將適用於非常基本的線程。但是,根據文檔(上面鏈接):

守護程序線程在關機時突然停止。他們的資源(如打開文件,數據庫事務等)可能無法正確釋放。如果你希望你的線程正常停止,使它們不是守護進程,並使用合適的信號機制,如事件。