日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python线程监控配置文件_一日一技:Python多线程的事件监控

發布時間:2025/3/19 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python线程监控配置文件_一日一技:Python多线程的事件监控 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一日一技:Python多線程的事件監控

設想這樣一個場景:

你創建了10個子線程,每個子線程分別爬一個網站,一開始所有子線程都是阻塞等待。一旦某個事件發生:例如有人在網頁上點了一個按鈕,或者某人在命令行輸入了一個命令,10個爬蟲同時開始工作。

肯定有人會想到用Redis來實現這個開關:所有子線程全部監控Redis中名為start_crawl的字符串,如果這個字符串不存在,或者為0,那么就等待1秒鐘,再繼續檢查。如果這個字符串為1,那么就開始運行。

代碼片段可以簡寫為:

import time

import redis

client = redis.Redis()

while client.get('start_crawl') != 1:

print('繼續等待')

time.sleep(1)

這樣做確實可以達到目的,不過每一個子線程都會頻繁檢查Redis。

實際上,在Python的多線程中,有一個 Event模塊,天然就是用來實現這個目的的。

Event是一個能在多線程中共用的對象,一開始它包含一個為 False的信號標志,一旦在任一一個線程里面把這個標記改為 True,那么所有的線程都會看到這個標記變成了 True。

我們通過一段代碼來說明它的使用方法:

import threading

import time

class spider(threading.Thread):

def __init__(self, n, event):

super().__init__()

self.n = n

self.event = event

def run(self):

print(f'第{self.n}號爬蟲已就位!')

self.event.wait()

print(f'信號標記變為True!!第{self.n}號爬蟲開始運行')

eve = threading.Event()

for num in range(10):

crawler = spider(num, eve)

crawler.start()

input('按下回車鍵,啟動所有爬蟲!')

eve.set()

time.sleep(10)

運行效果如下圖所示:

在這段代碼中,線程 spider在運行以后,會運行到 self.event.wait()這一行,然后10個子線程會全部阻塞在這里。而這里的 self.event,就是主線程中 eve=threading.Event()生成的對象傳入進去的。

在主線程里面,當執行了 eve.set()后,所有子線程的阻塞會被同時解除,于是子線程就可以繼續運行了。

kingname

攢錢給產品經理買房。

總結

以上是生活随笔為你收集整理的python线程监控配置文件_一日一技:Python多线程的事件监控的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。