python下多線程的思考
對于資源,加鎖是個(gè)重要的環(huán)節(jié)。因?yàn)閜ython原生的list,dict等,都是not thread safe的。而Queue,是線程安全的,因此在滿足使用條件下,建議使用隊(duì)列
包中的常用方法:
Queue.qsize() 返回隊(duì)列的大小
Queue.empty() 如果隊(duì)列為空,返回True,反之False
Queue.full() 如果隊(duì)列滿了,返回True,反之False
Queue.full 與 maxsize 大小對應(yīng)
Queue.get([block[, timeout]])獲取隊(duì)列,timeout等待時(shí)間
創(chuàng)建一個(gè)“隊(duì)列”對象
多線程示意圖:

進(jìn)程:一個(gè)程序運(yùn)行起來后,代碼+用到的資源 稱之為進(jìn)程,它是操作系統(tǒng)分配資源的基本單元。不僅可以通過線程完成多任務(wù),進(jìn)程也是可以的
進(jìn)程的狀態(tài)
工作中,任務(wù)數(shù)往往大于cpu的核數(shù),即一定有一些任務(wù)正在執(zhí)行,而另外一些任務(wù)在等待cpu進(jìn)行執(zhí)行,因此導(dǎo)致了有了不同的狀態(tài)
線程之間的操作是無序的
一個(gè)線程下面有一個(gè)主線程
線程:相當(dāng)于打開一個(gè)瀏覽器
進(jìn)程:相當(dāng)于在瀏覽器里面打開多個(gè)窗口
實(shí)現(xiàn)多任務(wù)的手段(方式):
1.多線程
2.多進(jìn)程
3.協(xié)程
什么是Scrapy框架
Scrapy一個(gè)開源和協(xié)作的框架是基于twisted框架開發(fā)而來,twisted是一個(gè)流行的事件驅(qū)動的python網(wǎng)絡(luò)框架。因此Scrapy使用了一種非阻塞(又名異步)的代碼來實(shí)現(xiàn)并發(fā)。是用純Python實(shí)現(xiàn)一個(gè)為了爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架,用途非常廣泛。導(dǎo)入 from multiprocessing import Pool
創(chuàng)建一個(gè)進(jìn)程池:pool = Pool()
pool.apply()? 同步的方法,執(zhí)行效率比較低
apply_async? 是一個(gè)異步方法,可以提高任務(wù)執(zhí)行的效率
func,對應(yīng)的任務(wù)的函數(shù)名稱
args=() , 傳遞參數(shù)(元組)
kwds={} , 傳遞參數(shù)(字典)
迭代器
迭代是訪問集合元素的一種方式。迭代器是一個(gè)可以記住遍歷的位置的對象。迭代器對象從集合的第一個(gè)元素開始訪問,直到所有的元素被訪問完結(jié)束。迭代器只能往前不會后退
可迭代對象?我們已經(jīng)知道可以對list、tuple、str等類型的數(shù)據(jù)使用for...in...的循環(huán)語法從其中依次拿到數(shù)據(jù)進(jìn)行使用,我們把這樣的過程稱為遍歷,也叫迭代。。