python循環(huán)定時中斷執(zhí)行某一段程序的實例
問題說明
最近在寫爬蟲,由于單個賬號訪問頻率太高會被封,所以需要在爬蟲執(zhí)行一段時間間隔后自己循環(huán)切換賬號
所以就在想,有沒有像單片機那樣子設(shè)置一個定時中斷,再定義一個中斷入口,這樣子每隔一段時間執(zhí)行一次中斷
當(dāng)然不能用sleep,這樣子整個進程就停在這了,而不是接著爬數(shù)據(jù)
解決方法
用到threading的Timer,也類似單片機那樣子,在中斷程序中再重置定時器,設(shè)置中斷,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)定時切換賬號,不過這個對于實際應(yīng)用可以不太方便,所以推薦使用第一種方法
以上這篇python循環(huán)定時中斷執(zhí)行某一段程序的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
從訓(xùn)練好的tensorflow模型中打印訓(xùn)練變量實例
今天小編就為大家分享一篇從訓(xùn)練好的tensorflow模型中打印訓(xùn)練變量實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python游戲開發(fā)實例之graphics實現(xiàn)AI五子棋
五子棋是經(jīng)典的棋牌類游戲,很多人都玩過,那么如何用Python實現(xiàn)五子棋呢,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
python pycurl驗證basic和digest認(rèn)證的方法
這篇文章主要介紹了python pycurl驗證basic和digest認(rèn)證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05

