11.什么是防火牆以及作用?
# 答案:
'''
在互聯網上防火牆是一種非常有效的網絡安全模型,通過它可以隔離風險區域(即Internet或有一定風險的網絡)與安全區域(局域網)的連接,同時不會妨礙人們對風險區域的訪問。所以它一般連接在核心交換機與外網之間。
1.過濾進出網絡的數據
2.2.管理進出訪問網絡的行為
3.3.封堵某些禁止業務
4.4.記錄通過防火牆信息內容和活動
5.5.對網絡攻擊檢測和告警
'''
12.select、poll、epoll模型的區別?
# 答案:
'''
I/O多路復用的本質就是用select/poll/epoll,去監聽多個socket對象,如果其中的socket對象有變化,只要有變化,用戶進程就知道了。
select是不斷輪詢去監聽的socket,socket個數有限制,一般為1024個;
poll還是采用輪詢方式監聽,只不過沒有個數限制;
epoll並不是采用輪詢方式去監聽了,而是當socket有變化時通過回調的方式主動告知用戶進程。
'''
13.簡述進程、線程、協程的區別以及應用場景?
# 答案:
'''
1.進程是操作系統資源分配的最小單位,擁有獨立的資源和地址空間
2.線程是CPU調度的單位
3.統一進程中的線程是資源共享的。
4.協程是用戶級別的,程序之間的切換由用戶自行處理,節省了CPU的調度時間。
'''
14.什么是GIL鎖?
# 答案:
'''
全局解釋鎖,每次只能一個線程獲得cpu的使用權:為了線程安全,也就是為了解決多線程之間的數據完整性和狀態同步而加的鎖,因為我們知道線程之間的數據是共享的。
'''
15.Python中如何使用線程池和進程池?
# 答案:
# 線程池
import threadpool, time
with open(r'../uoko_house_id.txt', 'r', encoding='utf-8') as f: # with open語句表示通用的打開文件的方式,此處用來獲取需要爬取參數的列表
roomIdLi = f.readlines()
roomIdList =[x.replace('\n','').replace(' ','') for x in roomIdLi]
print(roomIdList)
li = [[i, item] for i, item in enumerate(roomIdList)] # enumerate()將列表中元素和其下標重新組合輸出
def run(roomId):
"""對傳入參數進行處理"""
print('傳入參數為:', roomId)
time.sleep(1)
def main():
roomList = li # 房間信息
start_time = time.time()
print('啟動時間為:', start_time)
pool = threadpool.ThreadPool(10)
requests = threadpool.makeRequests(run, roomList)
[pool.putRequest(req) for req in requests]
pool.wait()
print("共用時:", time.time()-start_time)
if __name__ == '__main__':
main()
# 進程池
from multiprocessing.pool import Pool
from time import sleep
def fun(a):
sleep(5)
print(a)
if __name__ == '__main__':
p = Pool()
for i in range(10):
p.apply_async(fun, args= (i, ))
p.close()
p.join()
print("end")