溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python循環(huán)定時(shí)中斷執(zhí)行某一段程序的實(shí)例

發(fā)布時(shí)間:2020-10-01 20:53:50 來(lái)源:腳本之家 閱讀:281 作者:我要你的自然74 欄目:開(kāi)發(fā)技術(shù)

問(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è)參考,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI