网络编程2

关于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: 基于文件 (管道+ 锁) #第三方工具 : 基于网络/稳定性更强
原文地址:https://www.cnblogs.com/zhangqing979797/p/10539825.html