Python并发Gevent库(一)
生活随笔
收集整理的這篇文章主要介紹了
Python并发Gevent库(一)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
The real power of gevent comes when we use it for network and IO bound functions which can be cooperatively scheduled.
上面這句話是Python并發(fā)的一個庫Gevent開始時談到的
之前也曾有幸看過一個清華大佬的文章(不記得地址了), 稍微有點理解了Python本身的多線程其實任然不是真正的多線程。 所以一般看到只會在跟網(wǎng)絡(luò)連接以及有IO操作的時候才會顯現(xiàn)出現(xiàn)來。在查看這個Gevent庫的時候意外看到這個句話,忍不住就想寫下關(guān)于這個的小記錄。
- 據(jù)說Gevent只是協(xié)程~ ,根據(jù)我個人的理解,協(xié)程本質(zhì)上就是在程序維度上的 線程。用了這個,就可以保證對于當前線程來說,只要加入到一個協(xié)程組(抽象來理解好說明)。那么在這一個組內(nèi),只要發(fā)現(xiàn)有一個停了(比如IO, 或者等待網(wǎng)路的情況),那么就可以交出控制權(quán),讓別的函數(shù)在這個時間進行。通過這樣的調(diào)度,就可以使得整個程序運行的速度加快。
- 交換控制權(quán)的方法也比價容易,gevent.sleep()這個函數(shù)就實現(xiàn)了關(guān)于控制權(quán)交換的問題。
- 由于Python的線程使用起來本質(zhì)上還是一個線程。甚至于由于其他的設(shè)計,還會導致時間更慢。(這個有點像經(jīng)濟學中的菜單成本)。既然用多線程不太現(xiàn)實了(除非你要IO)。那不如就直接用協(xié)程, 而且協(xié)程更為輕量級,怎么說,在Python中使用線程都不如使用協(xié)程。(這個是我自己的觀點,不過還有很多很多的不同,如果各位大大有很不同意見,歡迎在評論區(qū)指出,不甚感激!)
這個庫使用起來也是特別方便的
也不敢造次,就用官方來做解釋吧
import geventdef foo():print('Running in foo')gevent.sleep(0)print('Explicit context switch to foo again')def bar():print('Explicit context to bar')gevent.sleep(0)print('Implicit context switch back to bar')gevent.joinall([gevent.spawn(foo),gevent.spawn(bar), ])輸出結(jié)果是:
Running in foo
Explicit context to bar
Explicit context switch to foo again
Implicit context switch back to bar
先用spawn來封裝一下這個函數(shù)類。接著再用joinall將所有給拼接起來~
語言只是實現(xiàn)上的不同,邏輯都是還類似的。在C/C++中這個入門比較好,再寫這個也比較輕松了~
總結(jié)
以上是生活随笔為你收集整理的Python并发Gevent库(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python通过一个网页地址获得网页标题
- 下一篇: AttributeError: modu