什么是回呼函式
指定一個任務后、并且指定一個回呼函式后,當指定的行程池執行的任務結束后,會將該任務的回傳值作為回呼函式的引數傳遞到回呼函式中,并且回呼函式得以執行
回呼函式在主行程中被執行
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()
一般在爬蟲中,用到回呼函式比較多,并且是將訪問網頁、下載網頁的程序放到子行程中去做,分析資料,處理資料讓回呼函式去做,因為訪問網頁與下載網頁有網路延時,而處理資料只占用很小的時間
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/550191.html
標籤:其他
上一篇:一天吃透作業系統八股文