日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python并发Gevent库(一)

發布時間:2025/4/16 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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库(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。