python 高并发 select socket_python单线程下实现多个socket并发过程详解

先看服务端的代码

import sys

# import socket

import time

import gevent

from gevent import socket

from gevent import monkey

monkey.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 socket

import gevent

import threading

import 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 socket

import gevent

ip_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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值