国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

通讀Python官方文檔之Threading

jasperyang / 2562人閱讀

摘要:但現在線程沒有優先級,沒有線程組,不能被銷毀停止暫停開始和打斷。守護線程也會結束,并強行終止整個程序。在中,他是目前可用的最底層的同步原語,由模塊提供。當處于狀態時,方法可以將狀態變為,并立即返回。否則會拋出錯誤。對象實現某些服務的共進退。

Python的threading模塊松散地基于Java的threading模塊。但現在線程沒有優先級,沒有線程組,不能被銷毀、停止、暫停、開始和打斷。 Java Thread類的靜態方法,被移植成了模塊方法。

main thread: 運行python程序的線程

daemon thread 守護線程,如果守護線程之外的線程都結束了。守護線程也會結束,并強行終止整個程序。不要在守護進程中進行資源相關操作。會導致資源不能正確的釋放。在非守護進程中使用Event。

Thread 類

(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

group: 為以后的ThreadGroup類預留
target: 被執行的對象,由run()方法執行
args: target對象使用的參數
daemon: 是否為守護進程

start()

每個thread 對象都只能被調用1次start()

run()

如果創建Thread的子類,重寫該方法。負責執行target參數傳來的可執行對象。

join()

阻塞線程直到結束。
GIL

CPython中,由于GIL的存在,Python每次只能執行一個線程。如果要充分利用多核機器的計算資源需要使用multiprocessing或者是concurrent.futures.ProcessPollExecutor但,但如果你想要很多I/O相關的并發操作,threding仍然是一個很好的選擇 。?因為系統自動實現了線程的上下文切換。

from threading import Thread
import requests

url = "http://www.baidu.com"

urls = [url]*20
threads = []

for url in urls:
    t = Thread(target=requests.get, args=(url, ))
    t.start()
    threads.append(t)

for t in threads:
    t.join()
鎖(Lock)對象

原始鎖(primitive lock),當它鎖住的時候,它是一種不屬于任何一個線程的同步原語(synchronization primitive)。 在Python中,他是目前可用的最底層的同步原語,由_thread模塊提供。

一個原始鎖有兩個狀態:lockedunlocked。鎖創建時,處于unlocked狀態。 鎖由兩個基本方法:acquire()release()。

當處于unlocked狀態時,acquire(()方法可以將狀態變為locked,并立即返回。當處于locked狀態時,acquire()會阻塞直至另一個線程調用了release()使改鎖解鎖,然后acquire()將鎖上鎖,并返回。

release()方法只能在鎖locked時別調用,并釋放鎖。否則會拋出RuntimeError錯誤。

如果有多個 acquire()在等待解鎖,則不確定哪一個哪一個會被觸發。

class threading.Lock

如果一個線程acquire了一個鎖,那么后續獲取它的線程都會被阻塞,直至鎖被釋放。任何線程都可以釋放鎖。

Lock是一個工廠函數,返回當前平臺下最高效的concrete Lock類的實例。

Lock支持上下文管理方法(context management protocol),也就是with 語句。在存在競態條件(race condition)的時候,要使用鎖。比如多線程共同操作某個數據。

# 摘自python Cookbook
import threading

class SharedCounter:

    def __init__(self, init_value=0):
        self._value  = init_value
        self._value_lock = threading.Lock()
    
    def incr(self, delta=1):
        # 在這里使用了with 語句,創建一個鎖,增加值,釋放鎖。
        with self._value_lock:
            self._value += 1
RLock對象

可重入鎖(reentrant lock)。感覺是一個鎖中鎖,就是可以遞歸的鎖。等見到具體的應用例子再寫。

Condition對象

condition變量總是與某種鎖相關,鎖可以是傳過來的,也可以通過默認設置創建。如果有多個 condition對象需要共享一個鎖時,傳遞一個鎖是非常有用的。鎖是condition對象的一部分,你不用刻意的跟蹤它。

Timer對象

TimerThread的子類,所以也要接受function參數,也可以被start()。 它的run()函數被重寫為先event.wait(interval),再啟動function

Barrier對象

實現某些服務的共進退。

threading.Barrier(parties, action=None, timeout=None)

設置n=parties個線程,當nbarrier.wait()被調用后,所有這些調用的阻塞被同時解除,執行action

感覺Barrier可以實現很多復雜的功能。


參考資料:

Python threading

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41126.html

相關文章

  • 通讀Python官方文檔cgitb

    摘要:腳本異常管理源代碼模塊為腳本提供了一個特殊的異常管理器。該模塊激活后,如果發生了未捕獲的異常,將會展示格式化的輸出報告。該報告包括源代碼每一層的回溯,以及當前執行程序的參數和局部變量。應當是含有異常類型異常值和對象的三元組,如同返回的那樣。 cgitb CGI腳本異常管理 源代碼: Lib/cgitb.py cgitb模塊為Python腳本提供了一個特殊的異常管理器。名字有點誤導人,它...

    laoLiueizo 評論0 收藏0
  • 通讀Python官方文檔cgitb

    摘要:腳本異常管理源代碼模塊為腳本提供了一個特殊的異常管理器。該模塊激活后,如果發生了未捕獲的異常,將會展示格式化的輸出報告。該報告包括源代碼每一層的回溯,以及當前執行程序的參數和局部變量。應當是含有異常類型異常值和對象的三元組,如同返回的那樣。 cgitb CGI腳本異常管理 源代碼: Lib/cgitb.py cgitb模塊為Python腳本提供了一個特殊的異常管理器。名字有點誤導人,它...

    KunMinX 評論0 收藏0
  • 通讀Python官方文檔cgi

    摘要:最近添加的功能是通過表單上傳文件。腳本的輸出由兩部分組成,由一個空行分割。后者接受重復鍵值二進制文件等。方法會返回所有為的值。進行類型檢查是必須的,因為會有好事的用戶,輸入重復的鍵名。 cgi 通用網關接口 前驅知識 網關協議學習:CGI、FastCGI、WSGI 簡單點說: web服務器接受請求,啟動CGI;CGI接受請求,處理,返回給服務器;服務器返回給用戶 cgi效率不高,每...

    lncwwn 評論0 收藏0
  • 通讀Python官方文檔cgi

    摘要:最近添加的功能是通過表單上傳文件。腳本的輸出由兩部分組成,由一個空行分割。后者接受重復鍵值二進制文件等。方法會返回所有為的值。進行類型檢查是必須的,因為會有好事的用戶,輸入重復的鍵名。 cgi 通用網關接口 前驅知識 網關協議學習:CGI、FastCGI、WSGI 簡單點說: web服務器接受請求,啟動CGI;CGI接受請求,處理,返回給服務器;服務器返回給用戶 cgi效率不高,每...

    thursday 評論0 收藏0
  • 通讀Python官方文檔協程、Future與Task

    摘要:所以在第一遍閱讀官方文檔的時候,感覺完全是在夢游。通過或者等待另一個協程的結果或者異常,異常會被傳播。接口返回的結果指示已結束,并賦值。取消與取消不同。調用將會向被包裝的協程拋出。任務相關函數安排協程的執行。負責切換線程保存恢復。 Tasks and coroutines 翻譯的python官方文檔 這個問題的惡心之處在于,如果你要理解coroutine,你應該理解future和tas...

    mgckid 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<