1. 程式人生 > >Python多任務實現 之協程並發下載多圖片

Python多任務實現 之協程並發下載多圖片

python 協程多任務

協程是Python中實現多任務一種方式,相比多任務之進程和線程,協程不需要消耗過多的資源,更高效的利用了cpu資源。

在Python中通過gevent封裝generator叠代器功能實現多任務的切換。協程在運行過程中是靠程序的耗時操作來實現程序中斷。達到切換多任務。至始至終,程序都是在一條主線程裏面完成的。

  1. 下面是一個利用協程實現多張圖片的同時下載。
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多任務實現 之協程並發下載多圖片