關於asyncio的使用html
做用:它是處理併發的重要利器python
# import asyncio # # async def hello(): # print("Hello world!") # await asyncio.sleep(1) # IO # print("Hello again!") # # # 獲取EventLoop: # loop = asyncio.get_event_loop() # # 執行coroutine # loop.run_until_complete(asyncio.wait([hello(),hello(),hello()])) import asyncio async def get_url(): reader,writer = await asyncio.open_connection('www.baidu.com',80) writer.write(b'GET / HTTP/1.1\r\nHOST:www.baidu.com\r\nConnection:close\r\n\r\n') all_lines = [] async for line in reader: data = line.decode() all_lines.append(data) html = '\n'.join(all_lines) return html # async def main(): # tasks = [] # for url in range(20): # tasks.append(asyncio.ensure_future(get_url())) # asyncio.wait(tasks) if __name__ == '__main__': loop = asyncio.get_event_loop() tasks = [] for url in range(20): tasks.append(asyncio.ensure_future(get_url())) loop.run_until_complete(asyncio.wait(tasks)) for i in tasks: print(i.result()) # loop.run_until_complete(main()) # 處理一個任務 # loop.run_until_complete(asyncio.wait([main()])) # 處理多個任務 # # task = loop.create_task(main()) # 使用create_task獲取返回值 # loop.run_until_complete(task) # loop.run_until_complete(asyncio.wait([task]))
8.什麼是socket,簡述基於tcp協議的套接字通訊流程程序員
socket(套接字) #實現應用層網絡通訊1的一組接口 #幫助咱們組織了網絡通訊須要的其餘四層各類協議數據 排列順序 長度限制 #基於文件家族完成IPC通訊
10.io多路複用和做用web
#操做系統機制 #代理監聽全部的網絡對象是否發生了讀寫操做 #可以幫助程序員在寫程序的時候解決基於tcp協議的socket server的連接佔用問題 #如今python的異步框架幾乎都是io多路複用實現的 #asyncio sanic tornado
13.簡述 進程,線程 協程的去區別 和應用場景redis
進程 高計算 線程 高io 協程 高網絡操做 下降程序的io操做 #全部的爬蟲\日誌分析\web框架
15.如何使用線程池,進程池服務器
#concurrent.futures # ThreadPoolExcutor # ProcessPoolExcutor # submit提交任務 # 添加回調函數 add_done_callback # 獲取返回值 result
20.路由器和交換機的區別網絡
#路由器 局域網與局域網之間的通訊 #交換機 局域網內部負責通訊
31.業務服務器192.168.1.2 訪問 192.168.1.3數據接口, 沒法返回正常數據 ,排查思路併發
#同網段 ping 檢測ip 確認機器活着 #telnet 檢測端口 #telnet 192.168.12.3 80
36.簡述多進程開發過程當中join和 deamon 的區別app
# import time # from multiprocessing import Process # def son(): # while True: # print('in son') # time.sleep(1) # # def son2(): # print('start son2') # time.sleep(10) # print('end son2') # # if __name__ == '__main__': # p = Process(target=son) # p.daemon = True # 守護進程 會等待主進程的代碼執行結束才結束 # p.start() # Process(target=son2).start() # time.sleep(3) # print('hahahah')
進程之間如何通訊 (ipc)框架
#基於網絡隊列/管道/消息隊列memcache/rabbitmq/redis
#管道 :基於socket + pickle #原生的queue: 基於文件 (管道+ 鎖) #第三方工具 : 基於網絡/穩定性更強