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

python多進(jìn)程使用apply_async的使用方法詳解

 更新時(shí)間:2022年09月15日 15:38:09   作者:IT之一小佬  
這篇文章主要介紹了python多進(jìn)程使用apply_async使用方法詳解,apply_async是異步非阻塞式,不用等待當(dāng)前進(jìn)程執(zhí)行完畢,隨時(shí)跟進(jìn)操作系統(tǒng)調(diào)度來進(jìn)行進(jìn)程切換,即多個(gè)進(jìn)程并行執(zhí)行,提高程序的執(zhí)行效率

前言:

python在同一個(gè)線程中多次執(zhí)行同一方法時(shí),該方法執(zhí)行耗時(shí)較長且每次執(zhí)行過程及結(jié)果互不影響,如果只在主進(jìn)程中執(zhí)行,效率會(huì)很低,因此使用multiprocessing.Pool(processes=n)及其apply_async()方法提高程序執(zhí)行的并行度從而提高程序的執(zhí)行效率,其中processes=n為程序并行執(zhí)行的進(jìn)程數(shù)。

 apply_async是異步非阻塞式,不用等待當(dāng)前進(jìn)程執(zhí)行完畢,隨時(shí)跟進(jìn)操作系統(tǒng)調(diào)度來進(jìn)行進(jìn)程切換,即多個(gè)進(jìn)程并行執(zhí)行,提高程序的執(zhí)行效率。

示例代碼1:

import time
import random
import multiprocessing
 
def func(x):
    ts = random.randint(1, 10)
    time.sleep(ts)
    print(f'{x}執(zhí)行完畢!耗時(shí){ts}s')
 
if __name__ == '__main__':
    pool = multiprocessing.Pool(6)
    for i in range(6):
        print(f"開始執(zhí)行第{i}個(gè)任務(wù)...")
        pool.apply_async(func, args=(i, ))
    pool.close()
    pool.join()

運(yùn)行結(jié)果:

在使用apply_async()方法接收多個(gè)參數(shù)的方法時(shí),在任務(wù)方法中正常定義多個(gè)參數(shù),參數(shù)以元組形式傳入即可 但是給apply_async()方法傳入多個(gè)值獲取多個(gè)迭代結(jié)果時(shí)就會(huì)報(bào)錯(cuò),因?yàn)樵摲椒ㄖ荒芙邮找粋€(gè)值,所以可以將該方法放入一個(gè)列表生成式中。

示例代碼2:

import multiprocessing
 
def func(x):
    return x ** 2
 
if __name__ == '__main__':
    pool = multiprocessing.Pool()
    res = [pool.apply_async(func, (i, )) for i in range(6)]
    print([x for x in res])
    print([x.get() for x in res])
    pool.close()
    pool.join()

運(yùn)行結(jié)果:

注意:join()等待所有子進(jìn)程結(jié)束后再運(yùn)行,使用join()前先使用close()關(guān)閉它。

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

相關(guān)文章

最新評(píng)論