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


Posted in Python onJuly 27, 2019

先看服务端的代码

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

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

Python 相关文章推荐
Python实现的数据结构与算法之快速排序详解
Apr 22 Python
Android分包MultiDex策略详解
Oct 30 Python
解读! Python在人工智能中的作用
Nov 14 Python
python更改已存在excel文件的方法
May 03 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
tensorflow 变长序列存储实例
Jan 20 Python
如何快速理解python的垃圾回收机制
Sep 01 Python
Python实现加密的RAR文件解压的方法(密码已知)
Sep 11 Python
python try...finally...的实现方法
Nov 25 Python
python分布式爬虫中消息队列知识点详解
Nov 26 Python
C站最全Python标准库总结,你想要的都在这里
Jul 03 Python
如何使用python操作vmware
Jul 27 #Python
利用python计算windows全盘文件md5值的脚本
Jul 27 #Python
Djang的model创建的字段和参数详解
Jul 27 #Python
python中bs4.BeautifulSoup的基本用法
Jul 27 #Python
Django的Modelforms用法简介
Jul 27 #Python
在django admin中添加自定义视图的例子
Jul 26 #Python
深入了解Django中间件及其方法
Jul 26 #Python
You might like
PHP+MySQL修改记录的方法
2015/01/21 PHP
PHP整合PayPal支付
2015/06/11 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
jquery 3D球状导航的文章分类
2010/07/06 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
详解JavaScript树结构
2017/01/09 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
JS Input里添加小图标的两种方法
2017/11/11 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
柯基袜:Corgi Socks
2017/01/26 全球购物
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
24岁生日感言
2014/01/13 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
董事长新年致辞
2015/07/29 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
WinServer2012搭建DNS服务器的方法步骤
2022/06/10 Servers