從零開始學Python | Python中的線程:了解如何在Python中使用線程
如今,Python已成為全球最受歡迎的編程語言之一。自1990年代成立以來,它已經吸引了眾多的追隨者以及每天致力于使這種編程語言變得更好的發燒友和編碼人員。在Python生態系統中內置的許多功能中,最引人注目的是線程。因此,在本文中,我們將討論有關Python中的線程的所有知識,以及如何利用它以及它的優缺點。
本文將介紹以下指針,
什么是Python中的線程?
在Python中啟動線程
什么是守護進程線程?
使用多線程
讓我們開始吧
用Python進行線程化
什么是Python中的線程?
Python中的線程可以簡單地定義為單獨的執行流程。這僅意味著在您的程序中,將同時執行兩個不同的進程。Python線程的一個有趣方面是,在第3版之后,Python中的多個線程不會同時執行,而只是看上去只是在執行。
同時運行兩個不同的進程讓人感到很驚奇,但需要了解的是,Python 3及更高版本的當前版本是以這樣一種方式編碼的,即只能在任何給定的時間點運行該進程。但是,如果需要在CPython中同時將兩個或多個進程同時使用,則還需要用其他語言(例如C,C ++和Java)編寫一些代碼,然后在Python中通過多線程運行它們。
Python中最著名的線程優勢之一是它具有提高設計清晰度的能力。
在此之前,我們對Python中的線程有一些了解,讓我們了解如何啟動線程,
在Python中啟動線程
既然您已經習慣了使用Python定義線程,那么讓我們來看一個有關如何使用Python創建自己的線程的示例。為了在Python中創建線程,您首先需要導入線程庫,然后指示它啟動(),如下例所示:
import logging import threading import time def thread_function(name): logging.info("Thread %s: starting", name) time.sleep(2) logging.info("Thread %s: finishing", name) if __name__ == "__main__": format = "%(asctime)s: %(message)s" logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S") logging.info("Main    : before creating thread") x = threading.Thread(target=thread_function, args=(1,)) logging.info("Main    : before running thread") x.start() logging.info("Main    : wait for the thread to finish") # x.join() logging.info("Main    : all done")
輸出
在Python中運行線程時,會將其作為函數傳遞,該函數包含需要執行的參數列表。在上面共享的示例中,您正在指示Python運行線程thread_function()并將其作為參數傳遞給1。
當您運行上述程序時,輸出將如下所示。
這篇關于“ Python中的線程”的文章的下一部分,讓我們看看什么是守護程序線程,
什么是守護進程線程?
用技術術語,可以將守護程序定義為主要在后臺運行的進程。但是,在Python中,守護程序線程具有非常特定的含義。在Python中,守護程序線程將在程序退出時立即關閉,盡管在其他編程語言中,它將繼續在后臺運行。如果在某個程序中沒有將線程編程為守護程序線程,則解釋器將等待它完成操作,然后僅關閉解釋器。
為了更好地理解這個概念,請看一下上面的例子。在第二行中,程序在完成所有任務后等待幾 秒鐘。這是因為它正在等待非守護線程完成其操作,然后退出該接口。一旦線程完成其操作,則僅程序退出。
現在讓我們修改上面的程序,看看如果在代碼中插入一個守護線程,會發生什么。
新代碼:x = threading.Thread(target = thread_function,args = {1,),daemon = True)
當您運行上面的程序并進行了修改時,它將看起來像這樣。
這兩個輸出之間的區別在于,最新的輸出缺少最后一行。thread_function()沒有機會完成,因為我們插入了一個守護程序線程,當它到達末尾時,它退出了程序。
加入線程
既然您已經了解了在Python中創建線程的概念以及守護線程的概念,那么讓我們發現如何在Python中加入線程。
通過在Python中使用join()函數,您可以連接兩個不同的線程,還可以指示一個線程等待另一個線程完成執行。當您對大型應用程序進行編碼并且需要以特定順序執行所有進程時,此功能通常會派上用場
本文有關“ Python線程”的最后一部分將向您展示有效的“多線程”,
使用多線程
在上面的示例中,我們談到了如何一次使用兩個線程。但是,如果在特定情況下需要同時使用多個線程,該怎么辦?為了更好地了解情況,請看以下示例。
import logging import threading import time def thread_function(name): logging.info("Thread %s: starting", name) time.sleep(2) logging.info("Thread %s: finishing", name) if __name__ == "__main__": format = "%(asctime)s: %(message)s" logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S") threads = list() for index in range(3): logging.info("Main    : create and start thread %d.", index) x = threading.Thread(target=thread_function, args=(index,)) threads.append(x) x.start() for index, thread in enumerate(threads): logging.info("Main    : before joining thread %d.", index) thread.join() logging.info("Main    : thread %d done", index)
輸出
在上面的程序中,我們遵循了導入線程庫,啟動線程,創建多個線程,然后使用join()函數將所有內容組合在一起并以特定順序執行的相同過程。
當您運行上述程序時,結果將如下所示。
結論
它是Python最方便的功能之一。通過正確使用它,您可以使整個編碼過程更加輕松和高效。從上面的文章中,我們希望您已經學習了線程的基礎知識,并將在您的日常編程中繼續使用它。
Python 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。