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中优化NumPy包使用性能的教程
Apr 23 Python
python通过apply使用元祖和列表调用函数实例
May 26 Python
python 写入csv乱码问题解决方法
Oct 23 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
python pygame实现方向键控制小球
May 17 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
python离线安装外部依赖包的实现
Feb 13 Python
Python chardet库识别编码原理解析
Feb 18 Python
python实现高效的遗传算法
Apr 07 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
php获取淘宝分类id示例
2014/01/16 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
Python列表和元组的定义与使用操作示例
2017/07/26 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
历史学专业毕业生求职信
2013/09/27 职场文书
中班开学寄语
2014/04/04 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
MySQL系列之六 用户与授权
2021/07/02 MySQL
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS