
网络编程
ZhaoXuWen23
这个作者很懒,什么都没留下…
展开
-
Python(socketserver实现并发)
import socketserverclass MyServer(socketserver.BaseRequestHandler): def handle(self): print('conn is: ',self.request) #conn print('addr is: ',self.client_address) #addr while True: try: #收消息原创 2020-12-08 11:52:44 · 161 阅读 · 0 评论 -
Python(select 模块)
import selectorsimport socketsel = selectors.DefaultSelector()#根据你的操作系统选择一个IO多路复用的方式,select或者epolldef accept(sock, mask): conn, addr = sock.accept() # Should be ready print('accepted', conn, 'from', addr)#accepted <socket.socket fd=568, fa原创 2020-12-07 14:11:32 · 169 阅读 · 0 评论 -
Python(IO model)
事件驱动模型上节的问题: 协程:遇到IO操作就切换。 但什么时候切回去呢?怎么确定IO操作完了?很多程序员可能会考虑使用“线程池”或“连接池”。“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲的线程重新承担新的执行任务。“连接池”维持连接的缓存池,尽量重用已有的连接、减少创建和关闭连接的频率。这两种技术都可以很好的降低系统开销,都被广泛应用很多大型系统,如websphere、tomcat和各种数据库等。但是,“线程池”和“连接池”技术也只是在...转载 2020-12-06 15:56:17 · 244 阅读 · 0 评论 -
Python(进程,协程)
#进程的调用方式和线程差不多,基本一样,但是进程用到了多核,是真正意义上的并发,下面的例子可以看出这个现象from multiprocessing import Processimport timedef f(name): time.sleep(1) print('hello', name,time.ctime())if __name__ == '__main__': p_list=[] for i in range(3): p = Proce转载 2020-12-06 15:28:08 · 123 阅读 · 0 评论 -
Python(生产消费者模型)
import time,randomimport queue,threadingq = queue.Queue()# q.put(2)# q.join()# q.put(3)def Producer(name): count = 0 while count <10: print("making........") time.sleep(5) q.put(count) print('Producer %s has produced %s baozi原创 2020-12-04 17:09:13 · 158 阅读 · 0 评论 -
Python(同步对象、信号量、线程队列)
import threading,timeclass Boss(threading.Thread): def run(self): print('Boss:今晚加班到12:00') print(event.isSet())#False print(event.is_set()) event.set() time.sleep(4) print('Boss:下班吧') event.set()原创 2020-12-04 17:06:42 · 150 阅读 · 0 评论 -
Python(GIL,同步锁,死锁和递归锁)
#并发:是指系统具有处理多个任务(动作)的能力#并行:是指系统具有同时处理多个任务(动作)的能力#同步:当进程执行到一个IO(等待外部数据,或者下载上传等)的时候 -----------等待:这个就是同步#异步:当进程执行到一个IO(等待外部数据,或者下载上传等)的时候 -----------不等待而去执行其他操作,到数据接收成功再来执行:这个就是异步#同步锁import threadingimport timedef foo(): global num #在每个线程中都能获取这个全原创 2020-12-04 16:59:53 · 159 阅读 · 0 评论 -
Python(线程)及使用的一些方法
import threadingimport timel = []def count(n): print(time.time()) for a in range(1,5): for b in range(1,5): for c in range(1,5): if a !=b and a!=c and b!=c: l.append(a*100+b*10+c) print原创 2020-12-04 10:37:26 · 132 阅读 · 0 评论 -
socket粘包最终解决方案(配置报头)
套接字:就是将传输层以下的协议封装成子接口对于应用程序来说只需调用套接字的接口,写出的程序自然是遵循tcp或udp协议的实现第一个功能个:实现:通过客户端向服务端发送命令,调取windows下面的cmd窗口,将服务端执行命令的结构,返回并显示在客户端窗口上。subprocess:1.可以将执行结果返回2.返回值是bytes类型(基于这两点,可以应用在server端,将服务端的返回直接以bytes的格式直接send给客户端,实现在客户端的显示)问题1:粘包问题粘包问题:实际是由TCP协转载 2020-11-24 17:21:42 · 866 阅读 · 0 评论 -
Python(socket多个客户端发请求及解决粘包)
import subprocess#subprocess模块,主要是Popen方法#subprocess.Popen('dir',shell = True)#意思是用shell工具解释dir这个命令.这个是shell命令,直接把结果放到了控制台,# 是通过管道来进行传输的,这种情况是把输出数据交给了控制器res = subprocess.Popen('dir',shell=True, stderr=subprocess.PIP原创 2020-11-24 16:54:50 · 588 阅读 · 1 评论 -
Python网络编程(socket,简单的客户端和服务端)
#服务端import socketphone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#socket.AF_INET意思是使用的套接字是这个,是基于网络通信,#socket.SOCK_STREAM意思是基于TCP协议,这整个的意思是基于TCP协议的网络通信phone.bind(('127.0.0.1',443))#这个是服务器的IP地址及端口号,能够直接定义到这段程序,就是给他生成一个位置phone.listen(5)#这个地方代表这个最原创 2020-11-23 16:27:08 · 258 阅读 · 1 评论