操作系統的四個特性? 併發:同一段時間內多個程式執行(與並行區分,並行指的是同一時刻有多個事件,多處理器系統可以使程式並行執行) 共用:系統中的資源可以被記憶體中多個併發執行的進線程共同使用 虛擬:通過分時復用(如分時系統)以及空分復用(如虛擬記憶體)技術把一個物理實體虛擬為多個 非同步:系統進程用一種走 ...
什麼是回調函數
指定一個任務後、並且指定一個回調函數後,當指定的進程池執行的任務結束後,會將該任務的返回值作為回調函數的參數傳遞到回調函數中,並且回調函數得以執行
回調函數在主進程中被執行
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()
一般在爬蟲中,用到回調函數比較多,並且是將訪問網頁、下載網頁的過程放到子進程中去做,分析數據,處理數據讓回調函數去做,因為訪問網頁與下載網頁有網路延時,而處理數據只占用很小的時間