python爬蟲應(yīng)用實戰(zhàn)-如何爬取好看的小姐姐照片?
線程鎖
Threading模塊為我們提供了一個類,Threading.Lock鎖。我們創(chuàng)建該類的對象,在線程函數(shù)執(zhí)行之前,“搶占”該鎖,執(zhí)行完成之后,“釋放”該鎖,則我們確保了每次只有一個線程占有該鎖。這時對一個公共對象進(jìn)行操作,則不會發(fā)生線程不安全的現(xiàn)象了。
當(dāng)多個線程同時訪問一個數(shù)據(jù)庫時,需要加鎖,排隊變成單線程,一個一個執(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
實現(xiàn)原始鎖對象的類。一旦一個線程獲得一個鎖,會阻塞隨后嘗試獲得該鎖的線程,直到它被釋放;任何線程都可以釋放它。
原始鎖是一個在鎖定時不屬于特定線程的同步基元組件。在Python中,它是能用最低級的同步基元組件,由_thread拓展模塊直接實現(xiàn)。
acquire(blocking=True, timeout=-1)
可以阻塞或者非阻塞的獲得鎖。
當(dāng)調(diào)用參數(shù)blocking設(shè)置為True,阻塞直到鎖被釋放,然后將鎖鎖定并返回True。
當(dāng)blocking設(shè)置為False時,將不會發(fā)生阻塞。
當(dāng)浮點型timeout參數(shù)設(shè)置為正值時,則阻塞特定的秒數(shù)。當(dāng)timeout為-1時,則表示無限等待。
Python 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。