阿摩線上測驗 登入

申論題資訊

試卷:109年 - 109 身心障礙特種考試_三等_資訊處理:程式語言#86491
科目:程式語言
年份:109年
排序:0

申論題內容

(四)請用 Python 並利用 multi-process 的方式,寫一段程式,同時下載兩部 videos,檔案名稱分別為 A.avi 與 B.avi,並顯示各自下載的時間。(5 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
import multiprocessing
import time
import requests
def download_video(url, filename):
    start_time = time.time()
    response = requests.get(url, stream=True)
    
    with open(filename, 'wb') as f:
        for chunk in response.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
    
    end_time = time.time()
    print(f"Downloaded {filename} in {end_time - start_time:.2f} seconds.")
if __name__ == "__main__":
    video_urls = {
        "A.avi": "http://example.com/path/to/A.avi",
        "B.avi": "http://example.com/path/to/B.avi"
    }
    processes = []
    for filename, url in video_urls.items():
        p = multiprocessing.Process(target=download_video, args=(url, filename))
        processes.append(p)
        p.start()
    for p in processes:
        p.join()
說明:
import 部分:
multiprocessing 模組用於創建和管理多個進程。
time 模組用於計算下載所花費的時間。
requests 模組用於進行 HTTP 請求和下載文件。
download_video 函數:
接受 url 和 filename 參數,開始計時。
使用 requests.get 進行下載,並將文件保存到本地。
結束計時並打印下載所花費的時間。
main 部分:
定義兩個視頻的下載 URL 和文件名。
創建多個進程,每個進程負責下載一個視頻。
啟動所有進程並等待它們完成。
注意事項:
將 http://example.com/path/to/A.avi 和 http://example.com/path/to/B.avi 替換為實際的視頻下載鏈接。
在使用 requests 下載大文件時,可以設置合適的 chunk_size 來平衡內存使用和下載速度。
確保所使用的下載鏈接是可用的,並且下載過程不會被防火牆或網絡設置阻止。
這段程式碼將同時下載兩個視頻並顯示每個視頻的下載時間。利用 multiprocessing,可以有效地利用多核 CPU 的性能,提高下載效率。