python進程池中的回調函數

什麼是回調函數

指定一個任務後、並且指定一個回調函數後,當指定的進程池執行的任務結束後,會將該任務的返回值作爲回調函數的參數傳遞到回調函數中,並且回調函數得以執行

回調函數在主進程中被執行

 import os
 from multiprocessing import Pool


 def func1(n):
     print('in func1', os.getpid())
     return n * n

 def func2(nn):
     print('in func2 %s ' % os.getpid())
     print(nn)

 if __name__ == '__main__':
     pool = Pool(4)
     pool.apply_async(func1, args=(10, ), callback=func2)    # calback爲回調參數,可以指定一個回調函數,這裏指定回調函數爲func2
     pool.close()
     pool.join()
     print(os.getpid())

10個任務func1投入到含有4個進程的進程池中異步執行,並且指定回調函數爲func2,當投入到進程池中的每個任務執行完後,都會將返回值作爲參數返回給回調函數,並且回調函數在主進程得以執行
執行了10次func1、10次func2

from multiprocessing import Pool

def func1(n):
    print('in func1')
    return n * n

def func2(nn):
    print('in func2')
    print(nn)

if __name__ == '__main__':
    pool = Pool(4)
    for i in range(10):
        pool.apply_async(func1, args=(10, ), callback=func2)    # calback爲回調參數,可以指定一個回調函數,指定進程池執行的任務結束後,會將任務的返回值作爲參數傳遞給回調函數,並執行回調函數,回調函數是在主進程中得以執行的
    pool.close()
    pool.join()

一般在爬蟲中,用到回調函數比較多,並且是將訪問網頁、下載網頁的過程放到子進程中去做,分析數據,處理數據讓回調函數去做,因爲訪問網頁與下載網頁有網絡延時,而處理數據只佔用很小的時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章