日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python编程基础:第六十节 多进程Multiprocessing

發(fā)布時間:2025/4/5 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。