03-06 26—30


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
'''


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM