博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day 36 网络编程终结内容
阅读量:4588 次
发布时间:2019-06-09

本文共 3432 字,大约阅读时间需要 11 分钟。

 

 

今日概要:

1 gevent模块    协程:单线程下实现并发(并发指的是看起来同时运行,实现方式:切换+保存状态)    遇到IO切换到其他任务去执行,这种切换才能提高效率    gevent模块    1、切换+保存状态    2、检测单线程下任务的IO,实现遇到IO自动切换2 IO模型3 socketserver4 subprocess5 paramiko (了解)
View Code

这个博客地址里有今天的所有内容,

http://www.cnblogs.com/linhaifeng/articles/7454717.html

 

昨天作业-----协程:

这里是服务端:from gevent import spawn,monkey;monkey.patch_all()from socket import *def server(ip,port):    server = socket(AF_INET, SOCK_STREAM)    server.bind((ip,port))    server.listen(5)    while True:        conn, addr = server.accept()        print(addr)        # ....        # t=Thread(target=talk,args=(conn,add))        # t.start()        spawn(talk,conn,addr)def talk(conn,addr):    while True:        try:            data=conn.recv(1024)            if not data:break            conn.send(data.upper())        except ConnectionResetError:            break    conn.close()if __name__ == '__main__':    server('127.0.0.1',8080)客户端:from socket import *client = socket(AF_INET, SOCK_STREAM)client.connect(('127.0.0.1',8080))while True:    client.send('hello'.encode('utf-8'))    data=client.recv(1024)    print(data.decode('utf-8'))
View Code

 

 

io模型:

io模型就是单纯的遇到阻塞就等待,原地待命,直至阻塞结束才会继续执行任务,这个等待的过程中占用cpu,占用的同时还不让其他的程序去使用CPU执行其他任务,就大大的降低了效率.

服务端:

from socket import *server = socket(AF_INET, SOCK_STREAM)server.bind(('127.0.0.1',8081))server.listen(5)while True:    conn, addr = server.accept()    print(addr)    while True:        try:            data=conn.recv(1024)            if not data:break            conn.send(data.upper())        except ConnectionResetError:            break    conn.close()server.close()
View Code

客户端:

from socket import *client = socket(AF_INET, SOCK_STREAM)client.connect(('127.0.0.1',8080))while True:    client.send('hello'.encode('utf-8'))    data=client.recv(1024)    print(data.decode('utf-8'))
View Code

 

 

非io模型:

服务端:

# from socket import *# import time# server = socket(AF_INET, SOCK_STREAM)# server.bind(('127.0.0.1',8084))# server.listen(3)# server.setblocking(False)  # 这里是在把socket接口设置成非阻塞,# conn_l = []  # 这是把所有的客户端都放到这个的空列表里面# while True:#     try:#         conn, addr = server.accept()#         conn_l.append(conn)  # 把得到的每一个客户端都放进这里的列表里面#         print(addr)#     except BlockingIOError:  # 遇到这个异常的时候就打印下面的内容,以此来避开异常#         print('do something else', conn_l)#         del_l = []  # 这里是又另外建一个空列表,这里的空列表我们要在里面存放一些冗余的数据以及客户端,#         # 那么问题来了,什么情况下是归属到冗余的客户端以及数据呢,我们的服务端跟多个客户端连接的时候,#         # 客户端会出现很多的特殊情况,比如断电断网或者心情不好就直接断开连接,那么这个时候是会影响到其他的客户端的,#         # 我们就把他们拿出来放到这个列表里面,然后再遍历这个列表里面的内容,最终目的是要把那些死掉的客户端从最初始的列表里面删除,#         # 这样每次循环的时候就不需要再循环他们了.因为他们已经死掉了,如果不删除他们的话,会报错.#         for conn in conn_l:  # 遍历这里存放客户端的列表#             try:#                 data = conn.recv(1024)#                 if not data:#                     conn.close()#                     del_l.append(conn)#                     continue#                 conn.send(data.upper())#             except BlockingIOError:#                 pass#             except ConnectionResetError:#                 conn.close()#                 del_l.append(conn)# #         for conn in del_l:#             conn_l.remove(conn)
View Code

客户端:

from socket import *client = socket(AF_INET, SOCK_STREAM)client.connect(('127.0.0.1',8084))while True:    msg=input('>>: ').strip()    if not msg:continue    client.send(msg.encode('utf-8'))    data=client.recv(1024)    print(data.decode('utf-8'))
View Code

 

转载于:https://www.cnblogs.com/2012-dream/p/7995318.html

你可能感兴趣的文章
VS2010 MFC中 创建文件夹及文件判空的方法
查看>>
【DWM1000】 code 解密4一 ANCHOR 二进宫testapprun_s
查看>>
UWB DWM1000 智能跟踪小车 --[蓝点无限]
查看>>
angular使用ngx-bootstrap的datepicker组件并实现本地化/国际化
查看>>
fiddler如何抓取手机包
查看>>
WPF事件转Command示例
查看>>
多位数的处理
查看>>
Java爬虫,信息抓取的实现
查看>>
Hibernate读书笔记-----HQL查询
查看>>
java8 stream一些知识
查看>>
RT600之OTFAD
查看>>
Unity3D研究院之使用Animation编辑器编辑动画(五十四)
查看>>
负载均衡
查看>>
剑指Offer-编程详解-二维数组中的查找
查看>>
ExtJs异步无法向外传值和赋值的解决办法,亲测有效
查看>>
窗口、视图、视图控制器
查看>>
[Codeforces 946G]Almost Increasing Array
查看>>
大型应用的javascript架构
查看>>
jQuery的Select操作集合
查看>>
HDU 2136 Largest prime factor
查看>>