麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 開(kāi)發(fā) > Python > 正文

python 協(xié)程 gevent原理與用法分析

2024-09-09 19:02:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了python 協(xié)程 gevent原理與用法。分享給大家供大家參考,具體如下:

gevent

greenlet已經(jīng)實(shí)現(xiàn)了協(xié)程,但是這個(gè)還的人工切換,是不是覺(jué)得太麻煩了,不要捉急,python還有一個(gè)比greenlet更強(qiáng)大的并且能夠自動(dòng)切換任務(wù)的模塊gevent

其原理是當(dāng)一個(gè)greenlet遇到IO(指的是input output 輸入輸出,比如網(wǎng)絡(luò)、文件操作等)操作時(shí),比如訪問(wèn)網(wǎng)絡(luò),就自動(dòng)切換到其他的greenlet,等到IO操作完成,再在適當(dāng)?shù)臅r(shí)候切換回來(lái)繼續(xù)執(zhí)行。

由于IO操作非常耗時(shí),經(jīng)常使程序處于等待狀態(tài),有了gevent為我們自動(dòng)切換協(xié)程,就保證總有g(shù)reenlet在運(yùn)行,而不是等待IO

安裝

pip3 install gevent

1. gevent的使用

import geventdef f(n):  for i in range(n):    print(gevent.getcurrent(), i)g1 = gevent.spawn(f, 5)g2 = gevent.spawn(f, 5)g3 = gevent.spawn(f, 5)g1.join()g2.join()g3.join()

運(yùn)行結(jié)果

<Greenlet at 0x10e49f550: f(5)> 0
<Greenlet at 0x10e49f550: f(5)> 1
<Greenlet at 0x10e49f550: f(5)> 2
<Greenlet at 0x10e49f550: f(5)> 3
<Greenlet at 0x10e49f550: f(5)> 4
<Greenlet at 0x10e49f910: f(5)> 0
<Greenlet at 0x10e49f910: f(5)> 1
<Greenlet at 0x10e49f910: f(5)> 2
<Greenlet at 0x10e49f910: f(5)> 3
<Greenlet at 0x10e49f910: f(5)> 4
<Greenlet at 0x10e49f4b0: f(5)> 0
<Greenlet at 0x10e49f4b0: f(5)> 1
<Greenlet at 0x10e49f4b0: f(5)> 2
<Greenlet at 0x10e49f4b0: f(5)> 3
<Greenlet at 0x10e49f4b0: f(5)> 4

可以看到,3個(gè)greenlet是依次運(yùn)行而不是交替運(yùn)行

2. gevent切換執(zhí)行

import geventdef f(n):  for i in range(n):    print(gevent.getcurrent(), i)    #用來(lái)模擬一個(gè)耗時(shí)操作,注意不是time模塊中的sleep    gevent.sleep(1)g1 = gevent.spawn(f, 5)g2 = gevent.spawn(f, 5)g3 = gevent.spawn(f, 5)g1.join()g2.join()g3.join()

運(yùn)行結(jié)果

<Greenlet at 0x7fa70ffa1c30: f(5)> 0
<Greenlet at 0x7fa70ffa1870: f(5)> 0
<Greenlet at 0x7fa70ffa1eb0: f(5)> 0
<Greenlet at 0x7fa70ffa1c30: f(5)> 1
<Greenlet at 0x7fa70ffa1870: f(5)> 1
<Greenlet at 0x7fa70ffa1eb0: f(5)> 1
<Greenlet at 0x7fa70ffa1c30: f(5)> 2
<Greenlet at 0x7fa70ffa1870: f(5)> 2
<Greenlet at 0x7fa70ffa1eb0: f(5)> 2
<Greenlet at 0x7fa70ffa1c30: f(5)> 3
<Greenlet at 0x7fa70ffa1870: f(5)> 3
<Greenlet at 0x7fa70ffa1eb0: f(5)> 3
<Greenlet at 0x7fa70ffa1c30: f(5)> 4
<Greenlet at 0x7fa70ffa1870: f(5)> 4
<Greenlet at 0x7fa70ffa1eb0: f(5)> 4

3. 給程序打補(bǔ)丁

from gevent import monkeyimport geventimport randomimport timedef coroutine_work(coroutine_name):  for i in range(10):    print(coroutine_name, i)    time.sleep(random.random())gevent.joinall([    gevent.spawn(coroutine_work, "work1"),    gevent.spawn(coroutine_work, "work2")])
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 性插视频| 国产黄色毛片 | 欧美成人黄色小视频 | 成人在线视频播放 | 麻豆视频国产在线观看 | 欧美a在线观看 | 性 毛片 | 日本看片一区二区三区高清 | 永久免费黄色片 | 久草在线观看首页 | 免费放黄网站在线播放 | 4p嗯啊巨肉寝室调教男男视频 | 久久毛片 | 成人在线视频免费看 | 97se亚洲综合在线韩国专区福利 | 国产精品久久久久久久久久久久午夜 | 中文字幕一区二区三区久久 | 亚洲小视频在线播放 | 国产一级免费在线视频 | 久久久久久片 | 国产精品1区2区 | 国产毛片自拍 | 性生活香蕉视频 | 男女羞羞视频在线免费观看 | 极品xxxx欧美一区二区 | 精品国内视频 | 一区二区三区欧美日韩 | 久久线视频 | 精品在线视频播放 | 91精品国产免费久久 | 欧美一级美国一级 | 国产成人强伦免费视频网站 | 黄网站免费入口 | 激情网站在线观看 | 国产亚洲高清在线精品不卡 | 宅男噜噜噜66一区二区 | 羞羞视频免费观看网站 | 亚洲性视频 | 欧美成人精品一区 | 亚洲国产馆 | 久久国产精品久久久久久电车 |