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读取json文件并将数据插入到mongodb的方法
Mar 23 Python
解密Python中的描述符(descriptor)
Jun 03 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 Python
解决python tkinter界面卡死的问题
Jul 17 Python
python调用支付宝支付接口流程
Aug 15 Python
Numpy之reshape()使用详解
Dec 26 Python
django从后台返回html代码的实例
Mar 11 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 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
咖啡知识大全
2021/03/03 新手入门
PHP如何利用P3P实现跨域
2013/08/24 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
网页布局中CSS样式无效的十个重要原因详解
2017/08/10 HTML / CSS
人事部专员岗位职责
2014/03/04 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
小学家长意见怎么写
2015/06/03 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
Java输出Hello World完美过程解析
2021/06/13 Java/Android
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers