欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python進(jìn)程池和線程池的區(qū)別

 更新時(shí)間:2023年12月10日 11:43:34   作者:樂(lè)神來(lái)了  
本文主要介紹了python進(jìn)程池和線程池的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

線程池和多線程的區(qū)別:

線程池可以減少線程創(chuàng)建和銷毀的開(kāi)銷,并控制并發(fā)數(shù)量,從而提高系統(tǒng)的性能。多線程可以并發(fā)執(zhí)行程序中的不同任務(wù),提高程序的效率和系統(tǒng)的吞吐量。
如果需要同時(shí)處理多個(gè)任務(wù)并且這些任務(wù)之間沒(méi)有依賴關(guān)系,那么可以選擇多線程;如果需要限制同時(shí)執(zhí)行的任務(wù)數(shù)量或者需要復(fù)用線程來(lái)避免頻繁創(chuàng)建和銷毀線程的開(kāi)銷或者當(dāng)需要執(zhí)行的任務(wù)數(shù)量很大但是每個(gè)任務(wù)所需的時(shí)間較短并且執(zhí)行時(shí)間相對(duì)穩(wěn)定,那么可以選擇線程池。

進(jìn)程池和多進(jìn)程的區(qū)別:

如果你需要同時(shí)執(zhí)行多個(gè)不同的任務(wù),使用多進(jìn)程;如果你需要并行處理多個(gè)任務(wù),并且每個(gè)任務(wù)都是獨(dú)立的,那么多進(jìn)程會(huì)是一個(gè)不錯(cuò)的選擇。每個(gè)進(jìn)程都有自己的內(nèi)存空間和獨(dú)立的 CPU 時(shí)間,可以避免多個(gè)任務(wù)之間的相互干擾。
如果你需要限制并發(fā)執(zhí)行任務(wù)的數(shù)量,使用進(jìn)程池。如果你的任務(wù)數(shù)比較大,而且每個(gè)任務(wù)執(zhí)行時(shí)間較短,那么進(jìn)程池可能更適合。進(jìn)程池會(huì)預(yù)先創(chuàng)建一定數(shù)量的進(jìn)程,任務(wù)到來(lái)時(shí)就將其分配給空閑的進(jìn)程執(zhí)行,避免反復(fù)創(chuàng)建和銷毀進(jìn)程的開(kāi)銷。

線程池的使用:

from concurrent.futures import ThreadPoolExecutor, as_completed, wait, ALL_COMPLETED


def test(a):
    print(f'一個(gè)假的進(jìn)程任務(wù){(diào)a}')
    return a

def add_thread():
    threads_list = [i for i in range(10)]
    th_executor = ThreadPoolExecutor(max_workers=10)
    for i in threads_list:
        # 線程池執(zhí)行任務(wù)方法1
        th_executor.submit(test, i)
    # 線程池執(zhí)行任務(wù)方法2
    th_executor.map(test, threads_list)

    # 線程池獲取結(jié)果方法1:使用as_completed方法,然后用其result屬性輸出結(jié)果
    all_thread = [th_executor.submit(test, i) for i in threads_list]
    results1 = [j.result() for j in as_completed(all_thread)]
    print('result1結(jié)果:', results1)
	# result1結(jié)果: [3, 0, 2, 4, 1, 5, 6, 8, 9, 7]

    # 線程池獲取結(jié)果方法2
    results2 = [k for k in th_executor.map(test, threads_list)]
    print('results2結(jié)果:', results2)
    # results2結(jié)果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    # 也可以使用等待函數(shù),fs:任務(wù)序列;timeout任務(wù)最大等待時(shí)間,在規(guī)定時(shí)間內(nèi),任務(wù)未執(zhí)行完成也會(huì)停止;
    # return_when:wait返回結(jié)果的條件,默認(rèn)為ALL_COMPLETED,全部執(zhí)行完成再返回
    # 譬如,此處以下的代碼是展示wait的用法
    # task_list = th_executor.map(test, threads_list)
    # 等待任務(wù)完成
    # wait(task_list)
    # 任務(wù)完成之后再進(jìn)行結(jié)果的獲取
    # task_result = [k for k in task_list]


if __name__ == '__main__':

    add_thread()


由result1結(jié)果和result2結(jié)果可知,使用submit方法執(zhí)行任務(wù)的順序是不固定的,使用map方法執(zhí)行任務(wù)的順序是固定的。

進(jìn)程池的用法:和線程池是一樣的;進(jìn)程池用的是with方法去展示的,也可以用線程池的那種方法是使用,當(dāng)然線程池的也可以用with方法去使用。

from concurrent.futures import ProcessPoolExecutor, as_completed, wait, ALL_COMPLETED

def test(a):
    print(f'一個(gè)假的線程任務(wù){(diào)a}')
    return a

def add_process():
    with ProcessPoolExecutor(max_workers=8) as pool:
        process_list = [i for i in range(10)]
        for i in process_list:
            # 進(jìn)程池執(zhí)行任務(wù)方法1
            pool.submit(test, i)
        # 進(jìn)程池執(zhí)行任務(wù)方法2
        pool.map(test, process_list)

        # 進(jìn)程池獲取結(jié)果方法1:使用as_completed方法,然后用其result屬性輸出結(jié)果
        all_process = [pool.submit(test, i) for i in process_list]
        results1 = [j.result() for j in as_completed(all_process)]
        print('result1結(jié)果:', results1)
        # results1結(jié)果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

        # 進(jìn)程池獲取結(jié)果方法2
        results2 = [k for k in pool.map(test, process_list)]
        print('results2結(jié)果:', results2)
    	# results2結(jié)果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

        # 也可以使用等待函數(shù),fs:任務(wù)序列;timeout任務(wù)最大等待時(shí)間,在規(guī)定時(shí)間內(nèi),任務(wù)未執(zhí)行完成也會(huì)停止;
        # return_when:wait返回結(jié)果的條件,默認(rèn)為ALL_COMPLETED,全部執(zhí)行完成再返回
        # 譬如,此處是展示wait的用法
        # task_list = pool.map(test, process_list)
        # # 等待任務(wù)完成
        # wait(task_list)
        # # 任務(wù)完成之后再進(jìn)行結(jié)果的獲取
        # task_result = [k for k in task_list]



if __name__ == '__main__':

    add_process()

由result1結(jié)果和result2結(jié)果可知,使用submit方法執(zhí)行任務(wù)的順序和使用map方法執(zhí)行任務(wù)的順序都是固定的。

到此這篇關(guān)于python進(jìn)程池和線程池的區(qū)別的文章就介紹到這了,更多相關(guān)python進(jìn)程池和線程池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python之ImportError:模塊引入異常問(wèn)題

    python之ImportError:模塊引入異常問(wèn)題

    這篇文章主要介紹了python之ImportError:模塊引入異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python中__call__內(nèi)置函數(shù)用法實(shí)例

    python中__call__內(nèi)置函數(shù)用法實(shí)例

    這篇文章主要介紹了python中__call__內(nèi)置函數(shù)用法,實(shí)例分析了python中__call__內(nèi)置函數(shù)的原理與使用技巧,需要的朋友可以參考下
    2015-06-06
  • python單測(cè)框架之pytest常見(jiàn)用法

    python單測(cè)框架之pytest常見(jiàn)用法

    pytest是python的單測(cè)框架,使用靈活,插件豐富,本文給大家分享python單測(cè)框架之pytest常見(jiàn)用法包括pytest常見(jiàn)的插件,感興趣的朋友跟隨小編一起看看吧
    2021-08-08
  • Python判斷空的五種方法

    Python判斷空的五種方法

    本文介紹了多種在Python中判斷變量是否為空的方法,包括if語(yǔ)句、len()函數(shù)、not關(guān)鍵字、bool()函數(shù)和try...except語(yǔ)句等,具有一檔的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • CAPL與Python交互的實(shí)現(xiàn)

    CAPL與Python交互的實(shí)現(xiàn)

    CAPL能做超級(jí)多的功能,本文主要介紹了CAPL與Python交互的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Python標(biāo)準(zhǔn)庫(kù)與第三方庫(kù)詳解

    Python標(biāo)準(zhǔn)庫(kù)與第三方庫(kù)詳解

    這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)與第三方庫(kù),需要的朋友可以參考下
    2014-07-07
  • Python腳本后臺(tái)運(yùn)行的五種方式

    Python腳本后臺(tái)運(yùn)行的五種方式

    最近需要在后臺(tái)運(yùn)行腳本,本文主要介紹了Python腳本后臺(tái)運(yùn)行的五種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用?Flask、Celery?和?Python?實(shí)現(xiàn)每月定時(shí)任務(wù)的步驟

    使用?Flask、Celery?和?Python?實(shí)現(xiàn)每月定時(shí)任務(wù)的步驟

    下面給大家分享使用?Flask、Celery?和?Python?實(shí)現(xiàn)每月定時(shí)任務(wù)的步驟,本文分步驟結(jié)合腳本給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 基于logstash實(shí)現(xiàn)日志文件同步elasticsearch

    基于logstash實(shí)現(xiàn)日志文件同步elasticsearch

    這篇文章主要介紹了基于logstash實(shí)現(xiàn)日志文件同步elasticsearch,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • python實(shí)現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例

    python實(shí)現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例

    這篇文章主要介紹了python實(shí)現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例,需要的朋友可以參考下
    2014-04-04

最新評(píng)論