黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

python并行處理任務(wù)時(shí) 該用多進(jìn)程?還是該用多線程?

系統(tǒng) 2082 0

在python并行處理任務(wù)時(shí)要使用多線程還是多進(jìn)程? 說(shuō)到這個(gè)話題,必須要提的GIL( Global Interpreter Lock)全局解釋鎖,當(dāng)Cpython每次執(zhí)行字節(jié)碼時(shí)都要先申請(qǐng)這個(gè)鎖。那么問(wèn)題就來(lái)了,如果使用多線程是比也會(huì)受到影響。

? ? ? ?多線程和多進(jìn)程程序比較,哪個(gè)性能更高?還是拿一個(gè)實(shí)例運(yùn)行來(lái)看看吧~?

?

            
              #寫一個(gè)簡(jiǎn)單的例子,計(jì)算100W個(gè)隨機(jī)數(shù)的和8次,同時(shí)將分散到8個(gè)線程進(jìn)行運(yùn)算。
#thread.py

#!/usr/bin/env python

import random
import threading

results = []

def compute():
    results.append(
        sum([random.randint(1,100) for i in range(1000000)]))

def main():        
    workers = [threading.Thread(target(compute) for  x in range(8))]

    for worker in workers:
        worker.start()
    
    for woker in workers:
        worker.join()
    print("Result: %s" % results)
   
   
if __name__  == "__main__":
    main()
    

    
#相同的功能,使用多進(jìn)程來(lái)實(shí)現(xiàn)
#worker.py

#!/usr/bin/env python

import multiprocessing
import random

def compute(n):
    return sum(
        [random.randint(1,100) for i in range(1000000)])
        
def main():
    pool = multiprocessing.Pool(8)
    print("Results: %s" % pool.map(compute, range(8)))
    
if __name__ == "__main__":
    main()
            
          

?

?兩個(gè)代碼片段已經(jīng)寫完了,接下來(lái)我找了三種配置的機(jī)器來(lái)運(yùn)行這兩段代碼:

?

配置1 ? ? ? 1Core ? ? ? ? ? ? ?2GB內(nèi)存

配置2

? ? ? 4Core ? ? ? ? ? ? ?8GB內(nèi)存
配置3 ? ? ? 48Core ? ? ? ? ? ? ?64GB內(nèi)存

?

實(shí)驗(yàn)1:

兩端代碼同時(shí)在1Core 2GB機(jī)器上運(yùn)行,查看運(yùn)行結(jié)果:

?

python并行處理任務(wù)時(shí) 該用多進(jìn)程?還是該用多線程?_第1張圖片

從運(yùn)行結(jié)果來(lái)看,多線程的程序比多進(jìn)程的程序效率要高,使用cpu都是99%(由于機(jī)器只有一個(gè)Core,多進(jìn)程沒(méi)有體現(xiàn)它的價(jià)值)。

?

實(shí)驗(yàn)2:

兩段代碼同時(shí)在4Core 8GB內(nèi)存機(jī)器上運(yùn)行,查看運(yùn)行結(jié)果:

?

python并行處理任務(wù)時(shí) 該用多進(jìn)程?還是該用多線程?_第2張圖片

從運(yùn)行結(jié)果來(lái)看,多進(jìn)程程序效率比多線程程序效率要高1倍還要多。cpu使用上多線程卡在了141%,多進(jìn)程跑到了379%,這里體現(xiàn)出多進(jìn)程的優(yōu)勢(shì)。

?

實(shí)驗(yàn)3:

兩段代碼同時(shí)在48core 64GB內(nèi)存機(jī)器上跑,查看運(yùn)行結(jié)果:

?

python并行處理任務(wù)時(shí) 該用多進(jìn)程?還是該用多線程?_第3張圖片

從運(yùn)行結(jié)果來(lái)看,多進(jìn)程程序cpu可以跑到715%(程序設(shè)置了開啟8個(gè)worker進(jìn)程,所以不會(huì)超過(guò)800%),而多線程卡在了124%。

?

通過(guò)以上測(cè)試結(jié)果,已經(jīng)可以得出。 python下多進(jìn)程程序要比多線程程序要高效。并且會(huì)隨著Core數(shù)不斷的增加,性能也會(huì)得到提升。

?

所以考慮在一定的時(shí)間內(nèi)并行處理一些工作時(shí),最好依靠多進(jìn)程創(chuàng)建多個(gè)作業(yè),以便在多個(gè)cpu之間分散負(fù)載。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論