Python编程基础:第六十节 多进程Multiprocessing
生活随笔
收集整理的這篇文章主要介紹了
Python编程基础:第六十节 多进程Multiprocessing
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
第六十節(jié) 多進(jìn)程Multiprocessing
- 前言
- 實踐
前言
多進(jìn)程能夠在不同的CPU核心上并行運行任務(wù),可以繞過用于線程的GIL。
多進(jìn)程:更適合密集計算相關(guān)任務(wù)(cpu使用率高)。
多線程:更好地處理與IO相關(guān)的任務(wù)。
實踐
我們來實現(xiàn)一個數(shù)據(jù)求和的功能,例如從0加到100000000。首先我們使用單個進(jìn)程進(jìn)行計算:
from multiprocessing import Process, cpu_count import time result = {} def counter(num_1, num_2, name):count = 0for i in range(num_1, num_2):count += iresult[name] = countprint(result)def main():a = Process(target=counter, args=(0, 100000000, '進(jìn)程1'))a.start()a.join()print('運行耗時: {} 秒'.format(time.perf_counter()))if __name__ == '__main__':main() >>> {'進(jìn)程1': 4999999950000000} >>> 運行耗時: 13.5747503 秒接下來我們使用兩個進(jìn)程進(jìn)行計算:
from multiprocessing import Process, cpu_count import time result = {} def counter(num_1, num_2, name):count = 0for i in range(num_1, num_2):count += iresult[name] = countprint(result)def main():a = Process(target=counter, args=(0, 50000000, '進(jìn)程1'))a.start()b = Process(target=counter, args=(50000000, 100000000, '進(jìn)程2'))b.start()a.join()b.join()print('運行耗時: {} 秒'.format(time.perf_counter()))if __name__ == '__main__':main() >>> {'進(jìn)程1': 1249999975000000} >>> {'進(jìn)程2': 3749999975000000} >>> 運行耗時: 9.9812741 秒接下來我們嘗試跑滿所有的CPU核心:
from multiprocessing import Process, cpu_count import time result = {} def counter(num_1, num_2, name):count = 0for i in range(num_1, num_2):count += iresult[name] = countprint(result)def main():print(cpu_count()) # 計算本機(jī)的CPU核心數(shù)目a = Process(target=counter, args=(0, 25000000, '進(jìn)程1'))a.start()b = Process(target=counter, args=(25000000, 50000000, '進(jìn)程2'))b.start()c = Process(target=counter, args=(50000000, 75000000, '進(jìn)程3'))c.start()d = Process(target=counter, args=(75000000, 100000000, '進(jìn)程4'))d.start()a.join()b.join()c.join()d.join()print('運行耗時: {} 秒'.format(time.perf_counter()))if __name__ == '__main__':main() >>> 4 >>> {'進(jìn)程3': 1562499987500000} >>> {'進(jìn)程1': 312499987500000} >>> {'進(jìn)程2': 937499987500000} >>> {'進(jìn)程4': 2187499987500000} >>> 運行耗時: 5.9548173 秒發(fā)現(xiàn)當(dāng)跑滿所有的CPU核心時速度是最快的(并不是越多越好哦,再多的話速度反而慢了),所以我們一般設(shè)定多進(jìn)程的進(jìn)程數(shù)目為CPU的核心數(shù)目
總結(jié)
以上是生活随笔為你收集整理的Python编程基础:第六十节 多进程Multiprocessing的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python编程基础:第五十九节 守护线
- 下一篇: KINDLE TOUCH修复板砖过程