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 调用VC++的动态链接库(DLL)
Sep 06 Python
Python中条件选择和循环语句使用方法介绍
Mar 13 Python
Pytorch入门之mnist分类实例
Apr 14 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
Python数据类型之Set集合实例详解
May 07 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
python树的同构学习笔记
Sep 14 Python
python 并发下载器实现方法示例
Nov 22 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
用Python实现屏幕截图详解
Jan 22 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
python中如何进行连乘计算
2020/05/28 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
店长助理岗位职责
2013/12/13 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
薪酬专员岗位职责
2014/02/18 职场文书
2014年创卫实施方案
2014/02/18 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript