您好,登錄后才能下訂單哦!
問題說明
最近在寫爬蟲,由于單個賬號訪問頻率太高會被封,所以需要在爬蟲執行一段時間間隔后自己循環切換賬號
所以就在想,有沒有像單片機那樣子設置一個定時中斷,再定義一個中斷入口,這樣子每隔一段時間執行一次中斷
當然不能用sleep,這樣子整個進程就停在這了,而不是接著爬數據
解決方法
用到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('我在爬數據') time.sleep(1)
輸出就像這樣子:
我在爬數據 我在爬數據 我在爬數據 這是中斷,切換賬號 我在爬數據 我在爬數據 我在爬數據 這是中斷,切換賬號 我在爬數據
現在問題就解決啦!
再想想單獨對于這個例子來說也是可以用sleep的,代碼如下
import threading import time def change_user(): while True: print('這是中斷,切換賬號') time.sleep(3) def spider(): while True: print('我在爬數據') time.sleep(1) t1 = threading.Thread(target=change_user) t2 = threading.Thread(target=spider) t2.start() t1.start() t2.join() t1.join()
因為兩個線程再執行sleep的時候會釋放GIL鎖,被另一線程搶到GIL鎖,也可以實現定時切換賬號,不過這個對于實際應用可以不太方便,所以推薦使用第一種方法
以上這篇python循環定時中斷執行某一段程序的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。