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字符编码判断方法分析
Jul 01 Python
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
PyQt5每天必学之单行文本框
Apr 19 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
对python过滤器和lambda函数的用法详解
Jan 21 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
接口自动化多层嵌套json数据处理代码实例
Nov 20 Python
Python如何telnet到网络设备
Feb 18 Python
python实现过滤敏感词
May 08 Python
python用tkinter开发的扫雷游戏
Jun 01 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 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
自己前几天写的无限分类类
2007/02/14 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
2014/02/10 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
js实现二级导航功能
2017/03/03 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
django富文本编辑器的实现示例
2019/04/10 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
毕业自我鉴定怎么写
2014/03/25 职场文书
投标担保书范文
2014/04/02 职场文书
爱岗敬业演讲稿
2014/05/05 职场文书
学生安全承诺书
2014/05/22 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python