Python多任務實現 之協程並發下載多圖片
阿新 • • 發佈:2018-04-08
python 協程多任務 協程是Python中實現多任務一種方式,相比多任務之進程和線程,協程不需要消耗過多的資源,更高效的利用了cpu資源。
在Python中通過gevent封裝generator叠代器功能實現多任務的切換。協程在運行過程中是靠程序的耗時操作來實現程序中斷。達到切換多任務。至始至終,程序都是在一條主線程裏面完成的。
- 下面是一個利用協程實現多張圖片的同時下載。
from gevent import monkey import gevent import urllib.request # 設置識別耗時操作 monkey.patch_all() def my_downLoad(url, file_name): try: # 根據url訪問網絡資源完成數據讀取 resp = urllib.request.urlopen(url) with open(file_name, "wb") as img_file: while True: # 讀取網絡圖片數據 file_data= resp.read(4096) if file_data: # 讀取到的數據寫入文件 img_file.write(file_data) else: break except Exception as e: print("下載異常:", e) else: print("圖片下載成功:%s" % file_name) # 程序入口 if __name__ == ‘__main__‘: # 準備下載url url1 = "http://pic1.5442.com/2013/0607/04/11.jpg" url2 = "https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1410462070,509649449&fm=27&gp=0.jpg" # 創建協程指派相應的任務 g1 = gevent.spawn(my_downLoad,url1, "1.jpg") g2 = gevent.spawn(my_downLoad,url2, "2.jpg") # 主線程等待所有的協程執行完,程序再退出 gevent.joinall([g1, g2])
Python多任務實現 之協程並發下載多圖片