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中的array数组模块相关使用
Jul 05 Python
Python 忽略warning的输出方法
Oct 18 Python
python/sympy求解矩阵方程的方法
Nov 08 Python
python2和python3的输入和输出区别介绍
Nov 20 Python
python3.6使用urllib完成下载的实例
Dec 19 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
Jan 29 Python
Python函数的参数常见分类与用法实例详解
Mar 30 Python
基于多进程中APScheduler重复运行的解决方法
Jul 22 Python
python爬虫中多线程的使用详解
Sep 23 Python
python enumerate内置函数用法总结
Jan 07 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
Python中的socket网络模块介绍
Jul 23 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语法(5)
2006/10/09 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
JQuery 常用方法基础教程
2009/02/06 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
Python中用altzone()方法处理时区的教程
2015/05/22 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
普通院校学生的自荐信
2013/11/27 职场文书
微博营销计划书
2014/01/10 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
趣味运动会开幕词
2015/01/28 职场文书
社区重阳节活动总结
2015/03/24 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
实习单位意见
2015/06/04 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
Redis Lua脚本实现ip限流示例
2022/07/15 Redis