#?在不開辟線程的基礎上,執(zhí)行多任務(多個任務交替執(zhí)行的),又稱為微線程
# 一般來說,協(xié)程有三種方式,待我一一道來
1. 首先是yield關(guān)鍵字,在def里面看到y(tǒng)ield關(guān)鍵字可以理解是協(xié)程

# 整體代碼較簡單,只需導入time包來進行耗時操作,剩下的靠代碼來操作!
——在每個def里的最后加入yield,然后在程序入口創(chuàng)建函數(shù)變量并且next()來執(zhí)行(利用死循環(huán))
——結(jié)果是兩個函數(shù)交替執(zhí)行,完成多任務
2. 再一個就是greenlet,事先檢查是否預裝該包(在命令行輸入pip3 list 查看)

# 這個就有點不一樣;
1. 導入greenlet和time
2. 創(chuàng)建任務(先不管g1.switch和g2.switch)
3. 程序入口,創(chuàng)建協(xié)程指定對應的任務greenlet.greenlet()
先切換到第一個任務g1.switch(),然后回到函數(shù)在第一個任務下切換到第二個任務g2.switch()
緊接著在第二個函數(shù)下又切換到第一個任務!
4. 這樣就達到了多任務交替執(zhí)行的結(jié)果
# greenlet框架封裝的是yield,greenlet能夠讓程序員很直觀的查看協(xié)程的切換
3. 這一種也是用的最多的方式,利用gevent

#? gevent封裝是greenlet,可以根據(jù)耗時操作自動完成協(xié)程之間的切換執(zhí)行
# 這種方式可以說是最清新的(個人覺得)(笑臉)
# 和前面兩種不同的是,只要創(chuàng)建多個任務,然后就交給程序入口了,后期好維護!
# 說重點,程序入口創(chuàng)建協(xié)程指定的任務gevent.spawn()
——然后就不用管了,會自動執(zhí)行協(xié)程,嘿嘿嘿!
#那么問題就來了,運行結(jié)果是沒有任何數(shù)據(jù)輸出;
1. 那是因為主線程沒有等待協(xié)程執(zhí)行完就退出了,所以每個任務加入join()等待
2. 還有就是耗時操作,gevent只認自己的耗時gevrnt.sleep();
要想識別time,前期導入monkey模塊(在gevent里),然后打個補丁monkey.patch_all()就好了!
@總結(jié);方式多,但都很簡易,加油!
————來自江西九江的一紙黑字~~