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脚本使得web页面上的代码高亮显示
Apr 24 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
python实现俄罗斯方块
Jun 26 Python
Python反射和内置方法重写操作详解
Aug 27 Python
python 图像平移和旋转的实例
Jan 10 Python
python3人脸识别的两种方法
Apr 25 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
Python简易版停车管理系统
Aug 12 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
Python中常用的os操作汇总
Nov 05 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 Python
Python超简单容易上手的画图工具库推荐
May 10 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
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
jQuery实现评论模块
2020/08/19 jQuery
我所理解的JavaScript中的this指向
2020/09/04 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
Python遍历字典方式就实例详解
2019/12/28 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
python线程join方法原理解析
2020/02/11 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
Python如何telnet到网络设备
2021/02/18 Python
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
慈善捐赠倡议书
2014/08/30 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
2014年财务人员工作总结
2014/11/11 职场文书
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫