本篇文章給大家分享的是有關(guān)Python中的協(xié)程是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。
成都創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比陵水黎族網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式陵水黎族網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋陵水黎族地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴(lài)。
線(xiàn)程和進(jìn)程的操作是由程序觸發(fā)系統(tǒng)接口,最后的執(zhí)行者是系統(tǒng);協(xié)程的操作則是程序員。
協(xié)程存在的意義:對(duì)于多線(xiàn)程應(yīng)用,CPU通過(guò)切片的方式來(lái)切換線(xiàn)程間的執(zhí)行,線(xiàn)程切換時(shí)需要耗時(shí)(保存狀態(tài),下次繼續(xù))。協(xié)程,則只使用一個(gè)線(xiàn)程,在一個(gè)線(xiàn)程中規(guī)定某個(gè)代碼塊執(zhí)行順序。
協(xié)程的適用場(chǎng)景:當(dāng)程序中存在大量不需要CPU的操作時(shí)(IO),適用于協(xié)程;
event loop是協(xié)程執(zhí)行的控制點(diǎn), 如果你希望執(zhí)行協(xié)程, 就需要用到它們。
event loop提供了如下的特性:
注冊(cè)、執(zhí)行、取消延時(shí)調(diào)用(異步函數(shù))
創(chuàng)建用于通信的client和server協(xié)議(工具)
創(chuàng)建和別的程序通信的子進(jìn)程和協(xié)議(工具)
把函數(shù)調(diào)用送入線(xiàn)程池中
協(xié)程示例:
import asyncio async def cor1(): print("COR1 start") await cor2() print("COR1 end") async def cor2(): print("COR2") loop = asyncio.get_event_loop() loop.run_until_complete(cor1()) loop.close()
最后三行是重點(diǎn)。
asyncio.get_event_loop() : asyncio啟動(dòng)默認(rèn)的event loop
run_until_complete() : 這個(gè)函數(shù)是阻塞執(zhí)行的,知道所有的異步函數(shù)執(zhí)行完成,
close() : 關(guān)閉event loop。
1、greenlet
import greenlet def fun1(): print("12") gr2.switch() print("56") gr2.switch() def fun2(): print("34") gr1.switch() print("78") gr1 = greenlet.greenlet(fun1) gr2 = greenlet.greenlet(fun2) gr1.switch()
2、gevent
gevent屬于第三方模塊需要下載安裝包
pip3 install --upgrade pip3 pip3 install gevent
import gevent def fun1(): print("www.baidu.com") # 第一步 gevent.sleep(0) print("end the baidu.com") # 第三步 def fun2(): print("www.zhihu.com") # 第二步 gevent.sleep(0) print("end th zhihu.com") # 第四步 gevent.joinall([ gevent.spawn(fun1), gevent.spawn(fun2), ])
遇到IO操作自動(dòng)切換:
import gevent import requests def func(url): print("get: %s"%url) gevent.sleep(0) date =requests.get(url) ret = date.text print(url,len(ret)) gevent.joinall([ gevent.spawn(func, 'https://www.pythontab.com/'), gevent.spawn(func, 'https://www.yahoo.com/'), gevent.spawn(func, 'https://github.com/'), ])
以上就是Python中的協(xié)程是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。