时间:2021-05-22
先看服务端的代码
import sys# import socketimport timeimport geventfrom gevent import socketfrom gevent import monkeymonkey.patch_all()#类似于python中的黑魔法,把很多模块的阻塞的变成非阻塞的,比如socket中的rece和send都变# 为不阻塞了 def server(port): s = socket.socket() s.bind(("127.0.0.1",port)) s.listen(2000) while True: cli,add = s.accept() gevent.spawn(handle_request,cli) #通过gevent的启动一个协程,把客户端的socket对象传进去def handle_request(s): try: while True: data = s.recv(1024) print("收到的信息:",str(data,encoding="utf-8")) s.send(data) if not data: s.shutdown(socket.SHUT_WR) #把和客户端这个链接销毁 except Exception as ex: print(ex) finally: s.close() if __name__ == '__main__': server(8000)在看客户端的代码,分别使用多线程和多进程实现
import socketimport geventimport threadingimport multiprocessing'''ip_bind = ("127.0.0.1",8000)c = socket.socket()c.connect(ip_bind)while True: data = input("客户端:") c.send(bytes(data,encoding="utf-8")) data = c.recv(1024) print("服务端:",str(data,encoding="utf-8")) c.close()'''import socketimport geventip_bind = ("127.0.0.1",8000)c = socket.socket()c.connect(ip_bind)def f(n): while True: # c.send(bytes(n,encoding="utf-8")) data = str(n) c.send(bytes(data,encoding="utf-8")) data = c.recv(1024) print("server:",str(data,encoding="utf-8")) c.close()x = []if __name__ == '__main__': l = [] """ 多线程实现并发客户端 for i in range(500): t = threading.Thread(target=f,args=[str(i),]) t.start() l.append(t) for t in l: t.join() """ # 多进程实现并发客户端 for i in range(100): p = multiprocessing.Process(target=f,args=[i,]) p.start() l.append(p) for p in l: p.join()以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、node单线程实现高并发原理众所周知nodejs是单线程且支持高并发的脚本语言。可为什么单线程的nodejs可以支持高并发呢?很多人都不明白其原理,下面我来
Node.js采用事件驱动和异步I/O的方式,实现了一个单线程、高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现
相信不少人对Javascript单线程表示怀疑:为何单线程可以实现异步操作呢?其实Javascript确实是单线程的(我们不妨把这个线程称作主线程),但它实现异
尽管asyncio库是使用单线程来实现协程的,但是它还是并发的,乱序执行的。可以说是单线程的调度系统,并且由于执行时有延时或者I/O中断等因素,每个协程如果同步
摘要:简介asyncio可以实现单线程并发IO操作,是Python中常用的异步处理模块。关于asyncio模块的介绍,笔者会在后续的文章中加以介绍,本文将会讲述