python進(jìn)線程——多進(jìn)程與多線程對(duì)比與介紹

1. 多進(jìn)程與多線程的區(qū)別

進(jìn)程與線程的區(qū)別在于二者的耗費(fèi)CPU與耗費(fèi)內(nèi)存的資源不同,對(duì)于耗費(fèi)CPU的比較多的操作使用多進(jìn)程編程.對(duì)于IO操作比較密集的情況要使用多線程編程.因?yàn)檫M(jìn)程切換的代價(jià)要高于線程.
*注意: 在windows中使用多進(jìn)程變編程的時(shí)候, 代碼一定要寫在if name=='main'中

2. 多進(jìn)程編程

(1) 進(jìn)程類: 進(jìn)程使用multiprocessing包中的Process,他的使用方法與Thread基本相同
(2)進(jìn)程池: 進(jìn)程池使用multiprocessing包中的Pool類, 它的第一個(gè)參數(shù)表示進(jìn)程池中的線程數(shù)量,如果不指定參數(shù)會(huì)默認(rèn)為CPU核數(shù)大小的進(jìn)程數(shù), 也可以通過multiprocessing.cpu_count()獲取CPU的核心數(shù)

代碼示例

import time
import multiprocessing


def test(seconds):
    time.sleep(seconds)
    print('sleep {} 秒'.format(seconds))
    return seconds


if __name__ == '__main__':
    pool = multiprocessing.Pool(multiprocessing.cpu_count())
    # 使用apply_async方法往進(jìn)程池中添加進(jìn)程
    result = pool.apply_async(func=test, args=(1,))
    # 必須先將進(jìn)程池close掉才能join
    pool.close()
    # 等待進(jìn)程池中的進(jìn)程運(yùn)行完成
    pool.join()
    # 使用get方法獲取運(yùn)行結(jié)果
    print(result.get())
    # imap方法類似于map方法,會(huì)將列表中的每個(gè)元素作為函數(shù)的參數(shù)加入到池中運(yùn)行,并且返回結(jié)果順序與列表中元素順序相同
    for res in pool.imap(test, [1, 3, 5]):
        print(res)
    # imap_unordered方法與imap方法基本相同,但返回結(jié)果的順序?yàn)橄葓?zhí)行完先返回
    for res in pool.imap_unordered(test, [1, 3, 5]):
        print(res)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 進(jìn)程與線程 進(jìn)程(Process)和線程(Thread)都是操作系統(tǒng)中的基本概念,它們之間有一些優(yōu)劣和差異。 1....
    0893051f5f11閱讀 556評(píng)論 1 1
  • 進(jìn)程和線程 對(duì)于操作系統(tǒng)來說,一個(gè)任務(wù)就是一個(gè)進(jìn)程(Process),比如打開一個(gè)瀏覽器就是啟動(dòng)一個(gè)瀏覽器進(jìn)程,打...
    闕馨妍子閱讀 253評(píng)論 0 1
  • 1.內(nèi)存的頁面置換算法 (1)最佳置換算法(OPT)(理想置換算法):從主存中移出永遠(yuǎn)不再需要的頁面;如無這樣的...
    杰倫哎呦哎呦閱讀 3,588評(píng)論 1 9
  • 1.進(jìn)程和線程 1.1系統(tǒng)多任務(wù)機(jī)制 多任務(wù)操作機(jī)制的引入主要是在相同的硬件資源下怎么提高任務(wù)處理效率的!多任務(wù)的...
    _寧采臣閱讀 1,129評(píng)論 0 6
  • 又來到了一個(gè)老生常談的問題,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問題開始,來談?wù)劜?..
    tangsl閱讀 4,317評(píng)論 0 23

友情鏈接更多精彩內(nèi)容