日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python多進程使用apply_async的使用方法詳解_python

作者:IT之一小佬 ? 更新時間: 2022-11-07 編程語言

前言:

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

?apply_async是異步非阻塞式,不用等待當前進程執行完畢,隨時跟進操作系統調度來進行進程切換,即多個進程并行執行,提高程序的執行效率。

示例代碼1:

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

運行結果:

在使用apply_async()方法接收多個參數的方法時,在任務方法中正常定義多個參數,參數以元組形式傳入即可 但是給apply_async()方法傳入多個值獲取多個迭代結果時就會報錯,因為該方法只能接收一個值,所以可以將該方法放入一個列表生成式中。

示例代碼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()

運行結果:

注意:join()等待所有子進程結束后再運行,使用join()前先使用close()關閉它。

原文鏈接:https://blog.csdn.net/weixin_44799217/article/details/126860696

欄目分類
最近更新