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