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

歡迎訪問 生活随笔!

生活随笔

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

python

多协程实例讲解(python 三)

發布時間:2025/4/16 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多协程实例讲解(python 三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

還是講解下這個官網上的代碼吧

代碼在這:(講解在下面)

import gevent from gevent.event import Event import time ''' Illustrates the use of events '''evt = Event()def setter():'''After 3 seconds, wake all threads waiting on the value of evt'''print('A: Hey wait for me, I have to do something')gevent.sleep(3)print("Ok, I'm done")evt.set()def waiter():'''After 3 seconds the get call will unblock'''print("I'll wait for you")evt.wait() # blockingprint("It's about time")def main():gevent.joinall([gevent.spawn(setter),gevent.spawn(waiter),gevent.spawn(waiter),gevent.spawn(waiter),gevent.spawn(waiter),gevent.spawn(waiter)])if __name__ == '__main__':starttime = time.time()main()endtime = time.time()print('Total use time is %.3f' % (endtime - starttime))

輸出的結果是:

A: Hey wait for me, I have to do something
I’ll wait for you
I’ll wait for you
I’ll wait for you
I’ll wait for you
I’ll wait for you
Ok, I’m done
It’s about time
It’s about time
It’s about time
It’s about time
It’s about time
Total use time is 3.005

從輸出的來看,雖然一開始是亂序的(可能是我解釋器的原因在這顯示的按照那個順序進行。)

  • 總之,setter在后來gevent.sleep(3)的時候就實現了將控制權交給其他的協程。而其他所有的協程都是等待協程(等待進行evt.wait())
  • 所以,在evt沒有進行到set()函數之前都是要一直這么等待下去的。

下面我做下改變。
改寫那個setter函數

def setter():'''After 3 seconds, wake all threads waiting on the value of evt'''print('A: Hey wait for me, I have to do something')gevent.sleep(3)print("Ok, I'm done")evt.set()print("After set.")gevent.sleep()print("After sleep")

A: Hey wait for me, I have to do something
I’ll wait for you
I’ll wait for you
I’ll wait for you
I’ll wait for you
I’ll wait for you
Ok, I’m done
After set.
It’s about time
It’s about time
It’s about time
It’s about time
It’s about time
After sleep
Total use time is 3.006

輸出變成了下面的這樣子。

  • 通過After set 在It is about time前面,我們可以推斷出來。event.set()沒有交換權限,只是設置了某一個類似啟動按鈕一樣的東西一樣~ 真正交換權限任然只有sleep()

總結

以上是生活随笔為你收集整理的多协程实例讲解(python 三)的全部內容,希望文章能夠幫你解決所遇到的問題。

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