python循環(huán)定時中斷執(zhí)行某一段程序的實例
問題說明
最近在寫爬蟲,由于單個賬號訪問頻率太高會被封,所以需要在爬蟲執(zhí)行一段時間間隔后自己循環(huán)切換賬號
所以就在想,有沒有像單片機那樣子設置一個定時中斷,再定義一個中斷入口,這樣子每隔一段時間執(zhí)行一次中斷
當然不能用sleep,這樣子整個進程就停在這了,而不是接著爬數(shù)據(jù)
解決方法
用到threading的Timer,也類似單片機那樣子,在中斷程序中再重置定時器,設置中斷,python實例代碼如下
import threading import time def change_user(): print('這是中斷,切換賬號') t = threading.Timer(3, change_user) t.start() #每過3秒切換一次賬號 t = threading.Timer(3, change_user) t.start() while True: print('我在爬數(shù)據(jù)') time.sleep(1)
輸出就像這樣子:
我在爬數(shù)據(jù) 我在爬數(shù)據(jù) 我在爬數(shù)據(jù) 這是中斷,切換賬號 我在爬數(shù)據(jù) 我在爬數(shù)據(jù) 我在爬數(shù)據(jù) 這是中斷,切換賬號 我在爬數(shù)據(jù)
現(xiàn)在問題就解決啦!
再想想單獨對于這個例子來說也是可以用sleep的,代碼如下
import threading import time def change_user(): while True: print('這是中斷,切換賬號') time.sleep(3) def spider(): while True: print('我在爬數(shù)據(jù)') time.sleep(1) t1 = threading.Thread(target=change_user) t2 = threading.Thread(target=spider) t2.start() t1.start() t2.join() t1.join()
因為兩個線程再執(zhí)行sleep的時候會釋放GIL鎖,被另一線程搶到GIL鎖,也可以實現(xiàn)定時切換賬號,不過這個對于實際應用可以不太方便,所以推薦使用第一種方法
以上這篇python循環(huán)定時中斷執(zhí)行某一段程序的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Jupyter?Notebook出現(xiàn)不是內(nèi)部或外部的命令解決方案
這篇文章主要介紹了Jupyter?Notebook出現(xiàn)不是內(nèi)部或外部的命令解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06python人工智能tensorflow常見損失函數(shù)LOSS匯總
這篇文章主要為大家介紹了python人工智能tensorflowf常見損失函數(shù)LOSS匯總,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05Python查詢oracle數(shù)據(jù)庫速度慢的解決方案
這篇文章主要介紹了Python查詢oracle數(shù)據(jù)庫速度慢的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04基于tensorflow __init__、build 和call的使用小結
這篇文章主要介紹了基于tensorflow __init__、build 和call的使用小結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02python神經(jīng)網(wǎng)絡使用Keras進行模型的保存與讀取
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡使用Keras進行模型的保存與讀取,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05