• 网络编程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: 基于文件 (管道+ 锁) #第三方工具 : 基于网络/稳定性更强
  • 相关阅读:
    ThinkPHP安全规范指引
    正则表达式:不能包含某些特殊字符串
    头晕是因为虚 ( ̄^ ̄゜)
    vs code中文扩展包
    table-cell width:1% 深入理解
    C#使用NPOI操作Excel
    C#利用LumenWorks.Framework.IO.Csv读取CSV文件
    发送邮件代码
    .net 集合详解
    EF Code First:数据更新最佳实践
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/10539825.html
Copyright © 2020-2023  润新知