python Semaphore控制線程的數量

2021-08-27 13:55:02 字數 879 閱讀 1775

#semaphore 是用於控制進入數量的鎖

#檔案, 讀、寫, 寫一般只是用於乙個執行緒寫,讀可以允許有多個

#做爬蟲

import threading

import time

class htmlspider(threading.thread):

def __init__(self, url, sem):

super().__init__()

self.url = url

self.sem = sem

def run(self):

time.sleep(2)

print("got html text success")

self.sem.release() #完成後,就釋放,可用執行緒數加1

class urlproducer(threading.thread):

def __init__(self, sem):

super().__init__()

self.sem = sem

def run(self):

for i in range(20):

self.sem.acquire() #在這裡每啟動乙個執行緒,可用執行緒數量就會減1

html_thread = htmlspider("".format(i), self.sem)

html_thread.start()

if __name__ == "__main__":

sem = threading.semaphore(3) # 定義最多啟用多少個執行緒

url_producer = urlproducer(sem)

url_producer.start()

控制線程的方法

控制線程的方法有join sleep 休眠 yield 讓步 suspend 掛起 resume 恢復 簡單的測試下sleep 和yield 並說明執行緒在這兩種狀態下對cpu的持有狀態和對同步鎖的持有狀態 在這裡不貼出程式執行的結果,大家可以根據 在自己的機器上跑一 會一下我接下來要闡述的,這要看...

pthread sigmask 控制線程的訊號掩碼

示例1 示例一 遮蔽訊號sigint 編譯 gcc pthread sigmask1.c lpthread 執行後,你發現你按下ctrl c 觸發sigint訊號 這個程式根本停不下來。因為sigint訊號已經如我們所願被遮蔽掉了。include include include include in...

控制線程的常用方法

讓乙個執行緒等待另乙個執行緒完成的方法 例如,main執行緒中呼叫a執行緒的join方法後,那麼在a執行緒結束後,main才會繼續執行 如果還有其他執行緒,其他執行緒與她兩無關 public static void main string args throws interruptedexcepti...