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网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
python中的内置函数getattr()介绍及示例
Jul 20 Python
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
python 平衡二叉树实现代码示例
Jul 07 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
django解决订单并发问题【推荐】
Jul 31 Python
numpy 声明空数组详解
Dec 05 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 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文件上传的简单实例
2013/10/19 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
javascript globalStorage类代码
2009/06/04 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
Python命令启动Web服务器实例详解
2017/02/23 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
python re模块匹配贪婪和非贪婪模式详解
2020/02/11 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
农民工工资发放承诺书
2014/03/31 职场文书
活动总结的格式
2014/05/07 职场文书
市场总监岗位职责
2015/02/11 职场文书
接待员岗位职责范本
2015/04/15 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
个人道歉信大全
2019/04/11 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS