python爬虫应用实战-如何爬取好看的小姐姐照片?
線程鎖
Threading模塊為我們提供了一個類,Threading.Lock鎖。我們創(chuàng)建該類的對象,在線程函數(shù)執(zhí)行之前,“搶占”該鎖,執(zhí)行完成之后,“釋放”該鎖,則我們確保了每次只有一個線程占有該鎖。這時對一個公共對象進(jìn)行操作,則不會發(fā)生線程不安全的現(xiàn)象了。
當(dāng)多個線程同時訪問一個數(shù)據(jù)庫時,需要加鎖,排隊(duì)變成單線程,一個一個執(zhí)行。加鎖可以避免并發(fā)時導(dǎo)致的邏輯錯誤,每當(dāng)一個線程a要訪問共享數(shù)據(jù)域時,必須先獲得鎖定;如果已經(jīng)有別的線程b獲得了鎖定,那么就讓線程a暫停,也就是同步阻塞;等到線程b執(zhí)行完畢,釋放鎖之后,再讓線程a繼續(xù)。
線程鎖的基本語法如下:
lock = threading.Lock() lock.acquire() # 上鎖 lock.release() # 釋放鎖threading.Lock
實(shí)現(xiàn)原始鎖對象的類。一旦一個線程獲得一個鎖,會阻塞隨后嘗試獲得該鎖的線程,直到它被釋放;任何線程都可以釋放它。
原始鎖是一個在鎖定時不屬于特定線程的同步基元組件。在python中,它是能用最低級的同步基元組件,由_thread拓展模塊直接實(shí)現(xiàn)。
acquire(blocking=True, timeout=-1)
可以阻塞或者非阻塞的獲得鎖。
當(dāng)調(diào)用參數(shù)blocking設(shè)置為True,阻塞直到鎖被釋放,然后將鎖鎖定并返回True。
當(dāng)blocking設(shè)置為False時,將不會發(fā)生阻塞。
當(dāng)浮點(diǎn)型timeout參數(shù)設(shè)置為正值時,則阻塞特定的秒數(shù)。當(dāng)timeout為-1時,則表示無限等待。
總結(jié)
以上是生活随笔為你收集整理的python爬虫应用实战-如何爬取好看的小姐姐照片?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬虫应用实战-如何爬取表情进
- 下一篇: Python爬虫应用实战-网站数据爬取及