关于asyncio的使用
作用:它是处理并发的重要利器
# 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 HOST:www.baidu.com Connection:close ') all_lines = [] async for line in reader: data = line.decode() all_lines.append(data) html = ' '.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多路复用和作用
#操作系统机制 #代理监听所有的网络对象是否发生了读写操作 #能够帮助程序员在写程序的时候解决基于tcp协议的socket server的链接占用问题 #现在python的异步框架几乎都是io多路复用实现的 #asyncio sanic tornado
13.简述 进程,线程 协程的去区别 和应用场景
进程 高计算 线程 高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 的区别
# 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: 基于文件 (管道+ 锁) #第三方工具 : 基于网络/稳定性更强