標籤:實現 技術 .com 共用記憶體 pre 開始 alt 沒有 單線程
1. 並發編程
- 實現讓程式同時執行多個任務也就是常說的“並發編程”
- 使用Python實現並發編程主要有3種方式:多進程、多線程、多進程+多線程。
- 處理序間通訊必須通過處理序間通訊機制(IPC,Inter-Process Communication)來實現資料共用,具體的方式包括管道、訊號、通訊端、共用記憶體區等。
2. 單進程單線程
from random import randintfrom time import time, sleepdef download_task(filename): print(‘開始下載%s...‘ % filename) time_to_download = randint(5, 10) sleep(time_to_download) print(‘%s下載完成! 耗費了%d秒‘ % (filename, time_to_download))def main(): start = time() download_task(‘檔案A.pdf‘) download_task(‘檔案B‘) end = time() print(‘總共耗費了%.2f秒.‘ % (end - start))if __name__ == ‘__main__‘: main()
沒有效率,一個檔案下載完,另一個檔案才下載
3. 把下載任務分別放到兩個進程中(多進程)
from multiprocessing import Processfrom os import getpidfrom random import randintfrom time import time, sleepdef download_task(filename): print(‘啟動下載進程,進程號[%d].‘ % getpid()) print(‘開始下載%s...‘ % filename) time_to_download = randint(5, 10) sleep(time_to_download) print(‘%s下載完成! 耗費了%d秒‘ % (filename, time_to_download))def main(): start = time() p1 = Process(target=download_task, args=(‘檔案A.pdf‘, )) p1.start() p2 = Process(target=download_task, args=(‘檔案B.avi‘, )) p2.start() # 主程式主線程等待子進程p1, p2完成再繼續執行 p1.join() p2.join() end = time() print(‘總共耗費了%.2f秒.‘ % (end - start))if __name__ == ‘__main__‘: main()
Python - 並發編程