簡體   English   中英

Python中的線程 - 線程或進程?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM