問題說明
最近在寫爬蟲,由于單個(gè)賬號(hào)訪問頻率太高會(huì)被封,所以需要在爬蟲執(zhí)行一段時(shí)間間隔后自己循環(huán)切換賬號(hào)
所以就在想,有沒有像單片機(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()
#每過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)在問題就解決啦!
再想想單獨(dú)對(duì)于這個(gè)例子來(lái)說也是可以用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),不過這個(gè)對(duì)于實(shí)際應(yīng)用可以不太方便,所以推薦使用第一種方法
以上這篇python循環(huán)定時(shí)中斷執(zhí)行某一段程序的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

