什麼是回調函數
指定一個任務後、並且指定一個回調函數後,當指定的進程池執行的任務結束後,會將該任務的返回值作爲回調函數的參數傳遞到回調函數中,並且回調函數得以執行
回調函數在主進程中被執行
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()
一般在爬蟲中,用到回調函數比較多,並且是將訪問網頁、下載網頁的過程放到子進程中去做,分析數據,處理數據讓回調函數去做,因爲訪問網頁與下載網頁有網絡延時,而處理數據只佔用很小的時間