学习笔记(34):Python网络编程并发编程-异步调用与回调机制
生活随笔
收集整理的這篇文章主要介紹了
学习笔记(34):Python网络编程并发编程-异步调用与回调机制
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
立即學(xué)習(xí):https://edu.csdn.net/course/play/24458/296452?utm_source=blogtoedu
1.知識(shí)點(diǎn):(詳細(xì)見(jiàn)代碼注釋)
1)同步調(diào)用:
res1 = pool.submit(ju,'john1').result()2)異步調(diào)用
pool.submit(ju,'john1')3)二者區(qū)別
異步調(diào)用:只是提交了任務(wù)即可,不會(huì)在原地等待結(jié)果,馬上運(yùn)行下面的代碼 同步調(diào)用:提交完任務(wù)后,在原地等待結(jié)果,等到結(jié)果后再執(zhí)行后面的代碼,代碼運(yùn)行的效果呈串行4)異步回調(diào)機(jī)制
#回調(diào)機(jī)制:異步調(diào)用不會(huì)等待結(jié)果,但是也可獲得結(jié)果,這里通過(guò)回調(diào)機(jī)制,來(lái)獲得一個(gè)concurrent.futures對(duì)象,需要通過(guò).result()來(lái)獲得數(shù)據(jù)5)同步與阻塞的區(qū)別
同步調(diào)用不管是I/O還是計(jì)算密集型都需要等待,而阻塞只有在I/O情況下才會(huì)發(fā)生
2.同步調(diào)用:同步調(diào)用不管是I/O還是計(jì)算密集型都需要等待,而阻塞只有在I/O情況下才會(huì)發(fā)生
#同步與異步調(diào)用都是提交任務(wù)的一種方式,以舉重最例#同步調(diào)用:提交完任務(wù)后,在原地等待結(jié)果,等到結(jié)果后再執(zhí)行后面的代碼,代碼運(yùn)行的效果呈串行 from concurrent.futures import ProcessPoolExecutor import time,random#創(chuàng)建函數(shù)模擬舉重的任務(wù) def ju(name):print('%s is juing'%name)#舉重的時(shí)間time.sleep(random.randint(2,3))#舉重的重量res = random.randint(4,8)return {'name':name,'res':res}#創(chuàng)建函數(shù)模擬提交舉重結(jié)果的事件 def weight(response):name = response['name']size = response['res']print('%s 舉重的重量是《%s》kg'%(name,size))if __name__ == '__main__':#創(chuàng)建進(jìn)程池pool = ProcessPoolExecutor(5)#提交任務(wù),此處使用同步調(diào)用result(),得到函數(shù)返回的結(jié)果res1 = pool.submit(ju,'john1').result()weight(res1)res2 = pool.submit(ju,'john2').result()weight(res2)res3 = pool.submit(ju,'john3').result()weight(res3)同步調(diào)用結(jié)果
X:\Users\13711\AppData\Local\Programs\Python\Python37\python.exe C:/Users/jinlin/Desktop/python_further_study/并發(fā)編程/異步調(diào)用與回調(diào)機(jī)制.py john1 is juing john1 舉重的重量是《7》kg john2 is juing john2 舉重的重量是《8》kg john3 is juing john3 舉重的重量是《7》kg進(jìn)程已結(jié)束,退出代碼02.異步調(diào)用
#異步調(diào)用:只是提交了任務(wù)即可,不會(huì)在原地等待結(jié)果,馬上運(yùn)行下面的代碼 #回調(diào)機(jī)制:異步調(diào)用不會(huì)等待結(jié)果,但是也可獲得結(jié)果,這里通過(guò)回調(diào)機(jī)制,來(lái)獲得一個(gè)concurrent.futures對(duì)象,需要通過(guò).result()來(lái)獲得數(shù)據(jù) from concurrent.futures import ProcessPoolExecutor import time,random#創(chuàng)建函數(shù)模擬舉重的任務(wù) def ju(name):print('%s is juing'%name)#舉重的時(shí)間time.sleep(random.randint(2,3))#舉重的重量res = random.randint(4,8)return {'name':name,'res':res}#創(chuàng)建函數(shù)模擬提交舉重結(jié)果的事件 def weight(response):response = response.result()name = response['name']size = response['res']print('%s 舉重的重量是《%s》kg'%(name,size))if __name__ == '__main__':#創(chuàng)建進(jìn)程池pool = ProcessPoolExecutor(5)#提交任務(wù),此處使用異步調(diào)用,不得到函數(shù)返回的結(jié)果,使用回調(diào)函數(shù)add_done_callback(回調(diào)函數(shù))來(lái)得到一個(gè)對(duì)象pool.submit(ju,'john1').add_done_callback(weight)pool.submit(ju,'john2').add_done_callback(weight)pool.submit(ju,'john3').add_done_callback(weight)異步調(diào)用的結(jié)果
X:\Users\13711\AppData\Local\Programs\Python\Python37\python.exe C:/Users/jinlin/Desktop/python_further_study/并發(fā)編程/異步調(diào)用與回調(diào)機(jī)制.py john1 is juing john2 is juing john3 is juing john1 舉重的重量是《5》kg john2 舉重的重量是《4》kg john3 舉重的重量是《5》kg進(jìn)程已結(jié)束,退出代碼0?
總結(jié)
以上是生活随笔為你收集整理的学习笔记(34):Python网络编程并发编程-异步调用与回调机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BZOJ3038 上帝造题的七分钟
- 下一篇: table tr th td