看了一天的驗證碼處理的問題屯援,發(fā)現現在的驗證碼實在是太復雜了猛们,我給跪了!主要之前從來沒做過圖片處理的問題狞洋,就是有也是公司直接接別人家的接口弯淘,我甚至只需要傳到我們自己的服務器,我們后臺跟它們去對接吉懊。
想了一下庐橙,既然驗證碼暫時應該研究不到,不如跳回之前寫的爬取圖片的爬蟲身上繼續(xù)研究吧借嗽,這次不上代碼了态鳖,因為我沒寫??
主要是想加快運行速度
畢竟有很多圖片等著程序去處理,而程序的運行速度并不盡人意恶导,而且今后如果深入研究的話浆竭,肯定會做大型的數據處理,所以我就跑去查python的多線程了- -
協(xié)程
查了一下發(fā)現并沒有多線程啊,應該是協(xié)程(摘自維基百科)
<a><blockquote>與子例程一樣兆蕉,協(xié)程也是一種程序組件羽戒。相對子例程而言缤沦,協(xié)程更為一般和靈活虎韵,但在實踐中使用沒有子例程那樣廣泛。協(xié)程源自Simula和Modula-2語言缸废,但也有其他語言支持包蓝。協(xié)程更適合于用來實現彼此熟悉的程序組件,如合作式多任務企量,迭代器测萎,無限列表和管道。</blockquote></a>
生成器
其實上面協(xié)程的定義不看也無所謂了届巩,因為python里面的協(xié)程可以說就是生成器硅瞧。
生成器是什么東西呢?
首先恕汇,咱們說一下迭代器和可迭代對象
什么是可迭代對象腕唧?很好理解,可以被迭代的對象就是可迭代對象瘾英。
在程序里面的判斷就是能用for迭代的:
<blockquote>有些同學可能還不理解迭代和遍歷的區(qū)別枣接,我在這稍微解釋以下,迭代就是把一個<b>線性結構</b>的每一個數據元素找出來缺谴,線性結構就是一個有序數據元素的集合但惶。非線性結構:不是在一個線性數列中,每個元素與其他0或多個數據元素有聯系湿蛔。而遍歷就是把非線性結構的元素一個個找出來膀曾。</blockquote>
而迭代器就是有next()方法的,既然有next()方法了阳啥,我認為其實就是一個生成器了妓肢。
生成器還有一個標志:yield。
如果一個普通的函數不用return苫纤,而是用了yield碉钠,那說明這個函數就是一個生成器了。
那生成器是干啥的呢卷拘?加快運行速度喊废。
舉個例子來說,過年了栗弟,你媽媽在包水餃(也不知道你爸爸干啥去了)污筷,你在等著給媽媽下水餃,然后正常的流程是這樣的:
包水餃--->等著包完--->包了一大盆--->下水餃---->開始吃。
如果你媽媽一直在包水餃怎么辦瓣蛀?比如她想囤糧食(想瞎了我的心了)陆蟆,家里的盆放不開了啊,而且包太多的話惋增,鍋也煮不開啊叠殷,怎么辦?
咱們把你媽媽包水餃的過程視作一個函數诈皿,然后每包完一個水餃林束,后面加一個:
<code>yield 你媽媽包的水餃</code>
這時候流程就變樣子了:你媽媽每包一個水餃,她就讓你去下水餃
這樣稽亏,根本都用不到盆:啊!=厍浮E痔凇!從今往后家里省下了買盆的錢瘪松,然后用這個錢買了彩票咸作,然后中獎了,然后你就走向了人生巔峰~
也就是說凉逛,每當我需要用到當前需要的數據時性宏,我才會讓生成器生成一條數據,不用的話就讓生成器掛在那状飞,他也不會重新運行毫胜,再用到的時候接著上次的繼續(xù)運行,這樣對內存和運行速度進行了非常大的優(yōu)化诬辈。
最后掛一句話酵使,是看的國外作者被翻譯過來的: