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

歡迎訪問 生活随笔!

生活随笔

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

python

学习笔记(34):Python网络编程并发编程-异步调用与回调机制

發布時間:2023/12/10 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习笔记(34):Python网络编程并发编程-异步调用与回调机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

立即學習:https://edu.csdn.net/course/play/24458/296452?utm_source=blogtoedu

1.知識點:(詳細見代碼注釋)

1)同步調用:

res1 = pool.submit(ju,'john1').result()

2)異步調用

pool.submit(ju,'john1')

3)二者區別

異步調用:只是提交了任務即可,不會在原地等待結果,馬上運行下面的代碼 同步調用:提交完任務后,在原地等待結果,等到結果后再執行后面的代碼,代碼運行的效果呈串行

4)異步回調機制

#回調機制:異步調用不會等待結果,但是也可獲得結果,這里通過回調機制,來獲得一個concurrent.futures對象,需要通過.result()來獲得數據

5)同步與阻塞的區別

同步調用不管是I/O還是計算密集型都需要等待,而阻塞只有在I/O情況下才會發生

2.同步調用:同步調用不管是I/O還是計算密集型都需要等待,而阻塞只有在I/O情況下才會發生

#同步與異步調用都是提交任務的一種方式,以舉重最例#同步調用:提交完任務后,在原地等待結果,等到結果后再執行后面的代碼,代碼運行的效果呈串行 from concurrent.futures import ProcessPoolExecutor import time,random#創建函數模擬舉重的任務 def ju(name):print('%s is juing'%name)#舉重的時間time.sleep(random.randint(2,3))#舉重的重量res = random.randint(4,8)return {'name':name,'res':res}#創建函數模擬提交舉重結果的事件 def weight(response):name = response['name']size = response['res']print('%s 舉重的重量是《%s》kg'%(name,size))if __name__ == '__main__':#創建進程池pool = ProcessPoolExecutor(5)#提交任務,此處使用同步調用result(),得到函數返回的結果res1 = pool.submit(ju,'john1').result()weight(res1)res2 = pool.submit(ju,'john2').result()weight(res2)res3 = pool.submit(ju,'john3').result()weight(res3)

同步調用結果

X:\Users\13711\AppData\Local\Programs\Python\Python37\python.exe C:/Users/jinlin/Desktop/python_further_study/并發編程/異步調用與回調機制.py john1 is juing john1 舉重的重量是《7》kg john2 is juing john2 舉重的重量是《8》kg john3 is juing john3 舉重的重量是《7》kg進程已結束,退出代碼0

2.異步調用

#異步調用:只是提交了任務即可,不會在原地等待結果,馬上運行下面的代碼 #回調機制:異步調用不會等待結果,但是也可獲得結果,這里通過回調機制,來獲得一個concurrent.futures對象,需要通過.result()來獲得數據 from concurrent.futures import ProcessPoolExecutor import time,random#創建函數模擬舉重的任務 def ju(name):print('%s is juing'%name)#舉重的時間time.sleep(random.randint(2,3))#舉重的重量res = random.randint(4,8)return {'name':name,'res':res}#創建函數模擬提交舉重結果的事件 def weight(response):response = response.result()name = response['name']size = response['res']print('%s 舉重的重量是《%s》kg'%(name,size))if __name__ == '__main__':#創建進程池pool = ProcessPoolExecutor(5)#提交任務,此處使用異步調用,不得到函數返回的結果,使用回調函數add_done_callback(回調函數)來得到一個對象pool.submit(ju,'john1').add_done_callback(weight)pool.submit(ju,'john2').add_done_callback(weight)pool.submit(ju,'john3').add_done_callback(weight)

異步調用的結果

X:\Users\13711\AppData\Local\Programs\Python\Python37\python.exe C:/Users/jinlin/Desktop/python_further_study/并發編程/異步調用與回調機制.py john1 is juing john2 is juing john3 is juing john1 舉重的重量是《5》kg john2 舉重的重量是《4》kg john3 舉重的重量是《5》kg進程已結束,退出代碼0

?

總結

以上是生活随笔為你收集整理的学习笔记(34):Python网络编程并发编程-异步调用与回调机制的全部內容,希望文章能夠幫你解決所遇到的問題。

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