這篇文章給大家分享的是有關(guān)Python多線程退出控制的方法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)公司是工信部頒發(fā)資質(zhì)IDC服務(wù)器商,為用戶提供優(yōu)質(zhì)的成都IDC機房托管服務(wù)日常前言
最近接 到一個搶票的爬蟲外包,那個網(wǎng)站及其之撈,訪問購票地址竟然還要排隊,在購票高峰臨時升一下服務(wù)器配置不行嗎…沒辦法,甲方爸爸的要求還得做啊,其中一個障礙便是目標(biāo)網(wǎng)站的后端限制了訪問頻次,俗話說:“上有政策,下有對策?!?立刻想到了多線程 + 多代理
的方式進行訪問。
但此時問題便來了,多代理還好說,再寫個爬蟲爬一堆下來就好,多線程可就麻煩多了,多線程一旦發(fā)出去了,基本等同于失控的狀態(tài),你無法去結(jié)束或者是重啟一個線程,最多只能是獲取線程的信息,沒有實際的控制權(quán),而且Python官方也沒有提供相應(yīng)的結(jié)束函數(shù)。那么接下來,讓我們來好好聊聊解決這個問題的思路。
單線程的結(jié)束
說實話,會百度在程序世界是一個優(yōu)秀的習(xí)慣,不然怎么會有這么一張表情包呢
但是百度這一次卻不盡人意,搜了很久,結(jié)果不盡人意,基本上所有的搜索結(jié)果都告訴我只有結(jié)束單個線程的方法,我也試過循環(huán)使用百度的結(jié)束函數(shù),但最終都只能是結(jié)束的當(dāng)前的這一個線程,無法達到目標(biāo)。
貼一段搜到的單線程結(jié)束代碼示例
def _async_raise(tid, exctype): tid = ctypes.c_long(tid) if not inspect.isclass(exctype): exctype = type(exctype) res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype)) if res == 0: raise ValueError("invalid thread id") elif res != 1: ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None) raise SystemError("PyThreadState_SetAsyncExc failed") def stop_thread(thread): _async_raise(thread.ident, SystemExit)
文章標(biāo)題:Python多線程退出控制的方法-創(chuàng)新互聯(lián)
本文地址:http://jinyejixie.com/article28/dpepcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、靜態(tài)網(wǎng)站、網(wǎng)站改版、網(wǎng)站建設(shè)、面包屑導(dǎo)航、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容