成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
設想這樣一個場景:你創建了10個子線程,每個子線程分別爬一個網站,一開始所有子線程都是阻塞等待。

設想這樣一個場景:

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

[[391226]]

 

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

代碼片段可以簡寫為:

  1. import time 
  2. import redis 
  3.  
  4. client = redis.Redis() 
  5. while client.get('start_crawl') != 1: 
  6.     print('繼續等待') 
  7.     time.sleep(1) 

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

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

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

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

  1. import threading 
  2. import time 
  3.  
  4. class spider(threading.Thread): 
  5.     def __init__(self, n, event): 
  6.         super().__init__() 
  7.         self.n = n 
  8.         self.event = event 
  9.  
  10.     def run(self): 
  11.         print(f'第{self.n}號爬蟲已就位!') 
  12.         self.event.wait() 
  13.         print(f'信號標記變為True!!第{self.n}號爬蟲開始運行') 
  14.  
  15. eve = threading.Event() 
  16. for num in range(10): 
  17.     crawler = spider(num, eve) 
  18.     crawler.start() 
  19.  
  20. input('按下回車鍵,啟動所有爬蟲!') 
  21. eve.set() 
  22. time.sleep(10) 

運行效果如下圖所示:

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

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

本文轉載自微信公眾號「未聞Code」,可以通過以下二維碼關注。轉載本文請聯系未聞Code公眾號。

 

責任編輯:趙寧寧 來源: 未聞Code
相關推薦

2024-11-13 09:18:09

2021-04-12 21:19:01

PythonMakefile項目

2021-04-27 22:15:02

Selenium瀏覽器爬蟲

2021-09-13 20:38:47

Python鏈式調用

2021-03-12 21:19:15

Python鏈式調用

2024-07-30 08:11:16

2024-07-30 08:16:18

Python代碼工具

2021-07-27 21:32:57

Python 延遲調用

2021-10-15 21:08:31

PandasExcel對象

2022-06-28 09:31:44

LinuxmacOS系統

2022-03-12 20:38:14

網頁Python測試

2025-05-28 03:15:00

Scrapy數據sleep

2023-10-29 09:16:49

代碼安全命令

2024-02-20 22:13:48

Python項目Java

2020-05-19 13:55:38

Python加密密碼

2021-04-23 21:40:33

Python優先級調度器

2023-10-28 12:14:35

爬蟲JavaScriptObject

2021-04-19 23:29:44

MakefilemacOSLinux

2021-06-01 21:24:44

多線程代碼搜索

2024-11-11 00:38:13

Mypy靜態類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久男人的天堂 | 免费一级黄色电影 | 日本在线一区二区 | 久久久久久久久久久久久久国产 | 欧美中文字幕在线 | 久久一区二区三区四区五区 | 午夜天堂精品久久久久 | 天天av天天好逼 | 天天天天天天天干 | 国产美女精品视频 | 一区日韩| 狠狠入ady亚洲精品经典电影 | 亚洲欧美日韩精品久久亚洲区 | 伊人网伊人网 | aaaaa毛片 | 国产丝袜一区二区三区免费视频 | 国产精品99久久久久久久vr | 欧美日韩精品中文字幕 | 精品国产乱码久久久久久老虎 | 国产精品久久久久久久久久免费看 | 人人人人干 | 国产精品夜夜夜一区二区三区尤 | 特黄色一级毛片 | 精品一区二区久久久久久久网站 | 免费亚洲成人 | 视频一区二区中文字幕 | 亚洲 欧美 另类 综合 偷拍 | 韩国av网站在线观看 | 国产精品电影在线观看 | 亚洲综合在线网 | 欧美日韩专区 | 国产欧美日韩一区 | 精品国产欧美日韩不卡在线观看 | 999精品在线| 精品福利一区二区三区 | 国产精品亚洲一区二区三区在线 | 一区二区国产精品 | 一级黄色片日本 | 久久精品久久精品 | 欧美激情视频一区二区三区在线播放 | 日本精品一区二区三区四区 |