Python编程基础:第六十节 多进程Multiprocessing
生活随笔
收集整理的這篇文章主要介紹了
Python编程基础:第六十节 多进程Multiprocessing
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第六十節(jié) 多進(jìn)程Multiprocessing
- 前言
- 實(shí)踐
前言
多進(jìn)程能夠在不同的CPU核心上并行運(yùn)行任務(wù),可以繞過(guò)用于線程的GIL。
多進(jìn)程:更適合密集計(jì)算相關(guān)任務(wù)(cpu使用率高)。
多線程:更好地處理與IO相關(guān)的任務(wù)。
實(shí)踐
我們來(lái)實(shí)現(xiàn)一個(gè)數(shù)據(jù)求和的功能,例如從0加到100000000。首先我們使用單個(gè)進(jìn)程進(jìn)行計(jì)算:
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('運(yùn)行耗時(shí): {} 秒'.format(time.perf_counter()))if __name__ == '__main__':main() >>> {'進(jìn)程1': 4999999950000000} >>> 運(yùn)行耗時(shí): 13.5747503 秒接下來(lái)我們使用兩個(gè)進(jìn)程進(jìn)行計(jì)算:
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('運(yùn)行耗時(shí): {} 秒'.format(time.perf_counter()))if __name__ == '__main__':main() >>> {'進(jìn)程1': 1249999975000000} >>> {'進(jìn)程2': 3749999975000000} >>> 運(yùn)行耗時(shí): 9.9812741 秒接下來(lái)我們嘗試跑滿所有的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ì)算本機(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('運(yùn)行耗時(shí): {} 秒'.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} >>> 運(yùn)行耗時(shí): 5.9548173 秒發(fā)現(xiàn)當(dāng)跑滿所有的CPU核心時(shí)速度是最快的(并不是越多越好哦,再多的話速度反而慢了),所以我們一般設(shè)定多進(jìn)程的進(jìn)程數(shù)目為CPU的核心數(shù)目
總結(jié)
以上是生活随笔為你收集整理的Python编程基础:第六十节 多进程Multiprocessing的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python编程基础:第五十九节 守护线
- 下一篇: KINDLE TOUCH修复板砖过程