您好,登錄后才能下訂單哦!
問(wèn)題說(shuō)明
最近在寫(xiě)爬蟲(chóng),由于單個(gè)賬號(hào)訪問(wèn)頻率太高會(huì)被封,所以需要在爬蟲(chóng)執(zhí)行一段時(shí)間間隔后自己循環(huán)切換賬號(hào)
所以就在想,有沒(méi)有像單片機(jī)那樣子設(shè)置一個(gè)定時(shí)中斷,再定義一個(gè)中斷入口,這樣子每隔一段時(shí)間執(zhí)行一次中斷
當(dāng)然不能用sleep,這樣子整個(gè)進(jìn)程就停在這了,而不是接著爬數(shù)據(jù)
解決方法
用到threading的Timer,也類似單片機(jī)那樣子,在中斷程序中再重置定時(shí)器,設(shè)置中斷,python實(shí)例代碼如下
import threading import time def change_user(): print('這是中斷,切換賬號(hào)') t = threading.Timer(3, change_user) t.start() #每過(guò)3秒切換一次賬號(hào) t = threading.Timer(3, change_user) t.start() while True: print('我在爬數(shù)據(jù)') time.sleep(1)
輸出就像這樣子:
我在爬數(shù)據(jù) 我在爬數(shù)據(jù) 我在爬數(shù)據(jù) 這是中斷,切換賬號(hào) 我在爬數(shù)據(jù) 我在爬數(shù)據(jù) 我在爬數(shù)據(jù) 這是中斷,切換賬號(hào) 我在爬數(shù)據(jù)
現(xiàn)在問(wèn)題就解決啦!
再想想單獨(dú)對(duì)于這個(gè)例子來(lái)說(shuō)也是可以用sleep的,代碼如下
import threading import time def change_user(): while True: print('這是中斷,切換賬號(hào)') 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()
因?yàn)閮蓚€(gè)線程再執(zhí)行sleep的時(shí)候會(huì)釋放GIL鎖,被另一線程搶到GIL鎖,也可以實(shí)現(xiàn)定時(shí)切換賬號(hào),不過(guò)這個(gè)對(duì)于實(shí)際應(yīng)用可以不太方便,所以推薦使用第一種方法
以上這篇python循環(huán)定時(shí)中斷執(zhí)行某一段程序的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。