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中类的初始化特殊方法
Dec 01 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
python3使用SMTP发送简单文本邮件
Jun 19 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
Python 文件数据读写的具体实现
Jan 24 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
python 中的@运算符使用
May 26 Python
python3操作redis实现List列表实例
Aug 04 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/06/09 PHP
php使用百度天气接口示例
2014/04/22 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
JavaScript的parseInt 取整使用
2011/05/09 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
keras slice layer 层实现方式
2020/06/11 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
Jones New York官网:美国女装品牌,受白领女性欢迎
2019/11/26 全球购物
工程力学硕士生的自我评价范文
2013/11/16 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
党校毕业个人总结
2015/02/28 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
党支部评议意见
2015/06/02 职场文书
趣味运动会赞词
2015/07/22 职场文书
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技