26.有A.txt和B.txt兩個文件, 使用多進程和進程池的方式分別讀取這兩個文件
# 答案:
# 多進程
"""通過多進程加速讀取excel的測試"""
__author__ = "hanyaning@deri.energy"
import os.path
import time
from service import logger
import pandas as pd
from multiprocessing import Process, Manager
startTime = time.time()
logger = logger.MyLogger("multi_process").getLogger()
def getExcelData(path, return_data=None, file_name=""):
global startTime
logger.info("開始讀取Excel文件,當前進程pid:" + str(os.getpid()))
if not os.path.exists(path):
raise FileNotFoundError()
if os.path.isfile(path):
return_data[file_name] = pd.read_excel(path, skiprows=1, skipfooter=1)
logger.info("讀取Excel文件完畢,當前進程pid:" + str(os.getpid()))
if __name__ == "__main__":
excel_path = os.path.join(os.getcwd(), "../excels")
xls_names = [x for x in os.listdir(excel_path) if x.endswith(".xls")]
first = str(time.time() - startTime)
logger.info("進入程序用時:" + first)
p_list = []
# Manager類似於同步數據管理工具,可在多進程時實現各進程操作同一個數據,比如這里通過它組織返回值
manager = Manager()
# Manager.dict()類似於共享變量,各個進程可以修改它,通過每次添加不同的key值,可以實現方法返回值的獲取
return_data = manager.dict()
first = time.time() - startTime
# 手動創建多個進程讀取,可能存在創建進程過多導致系統崩潰的情況
for file_name in xls_names:
p = Process(target=getExcelData, args=(os.path.join(excel_path, file_name), return_data, file_name))
p.start()
p_list.append(p)
print(p_list)
"""
經測試,直到這里都還會延遲數秒才執行進程的target方法,盡管前面已經調用了start(),但進程並沒有立即執行
寡人認為是系統創建進程需要時間,並且是創建好所有進程后才各進程才開始工作,這里要創建120個進程花費了大多數的時間
后面在采用進程池時,當設置最大進程數為120時,依然花費了大把的時間,而設置為10時,大大縮小了創建進程到執行target方法所要等待的時間
這也證明了寡人的觀點,至於正確與否,寡人先跟代碼去了,且等下回分解
"""
for p in p_list:
# 如果有子進程沒有執行完,需要先阻塞主進程
p.join()
logger.info("各進程執行完畢")
# 獲取返回值字典為列表
data_frames = return_data.values()
# 合並列表為一個dataFrame
data = pd.DataFrame()
for da in data_frames:
data = data.append(da)
endTime = time.time()
print(endTime - startTime)
print(len(data))
# 進程池
"""通過多進程加速讀取excel的測試"""
__author__ = "hanyaning@deri.energy"
import os.path
import time
from service import logger
import pandas as pd
from multiprocessing import Pool
logger = logger.MyLogger("multi_process").getLogger()
def getExcelData(path):
logger.info("開始讀取excel,當前進程pid:" + str(os.getpid()))
data = pd.DataFrame()
if not os.path.exists(path):
raise FileNotFoundError()
if os.path.isfile(path):
logger.info("讀取Excel文件完畢,當前進程pid:" + str(os.getpid()))
return data.append(pd.read_excel(path, skiprows=1, skipfooter=1), sort=False)
if __name__ == "__main__":
excel_path = os.path.join(os.getcwd(), "../excels")
xls_names = [x for x in os.listdir(excel_path) if x.endswith(".xls")]
startTime = time.time()
p_list = []
# 使用進程池Pool
pool = Pool(processes=10)
pool_data_list = []
data = pd.DataFrame()
for file_name in xls_names:
# 需要注意不能直接在這里調用get方法獲取數據,原因是apply_async后面 get()等待線程運行結束才會下一個,這里多進程會變成阻塞執行
pool_data_list.append(pool.apply_async(getExcelData, (os.path.join(excel_path, file_name),)))
pool.close()
# 需要阻塞以下,等所有子進程執行完畢后主線程才繼續執行
pool.join()
for pool_data in pool_data_list:
# 這里再使用get()方法可以獲取返回值
data = data.append(pool_data.get())
endTime = time.time()
print(endTime - startTime)
print(len(data))
27.以下那些是常見的TCPFlags?(多選)
'''
A.SYN
B.RST
C.ACK
D.URG
'''
# 答案:
'''
A,B,C,D
'''
28.下面關於網絡七層和四層的述, 哪條是錯誤的?
'''
A.SNMP工作在四層
B.四層是指網絡的傳輸層, 主要包括IP和端口信息
C.七層是指網絡的應用層(協議層), 比如http協議就工作在七層
D.四層主要應用於TCP和UDP的代理, 七層主要應用於HTTP等協議的代理
'''
# 答案:
A
29.tracerroute一般使用的是哪種網絡層協議
'''
A.VRRP
B.UDP
C.ARP
D.ICMP
'''
# 答案:
D
30.iptables知識考察, 根據要求寫出防火牆規則?
'''
A.屏蔽192.168.1.5訪問本機dns服務端口
B.允許10.1..0/2訪問本機的udp88889999端口
'''
# 答案:
'''
iptables -A INPUT -p ICMP --icmp-type 8 -m time --timestart 00:00:00 --timestop 23:59:59 --weekdays Mon -j DROP
'''