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 相关文章推荐
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
python Django批量导入数据
Mar 25 Python
python中根据字符串调用函数的实现方法
Jun 12 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
python 日期排序的实例代码
Jul 11 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
Aug 06 Python
python中的global关键字的使用方法
Aug 20 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
django orm模块中的 is_delete用法
May 20 Python
Python代码实现双链表
May 25 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
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
php 获得汉字拼音首字母的函数
2009/08/01 PHP
10个实用的PHP代码片段
2011/09/02 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
phplot生成图片类用法详解
2015/01/06 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
JavaScript判断变量是否为空的自定义函数分享
2015/01/31 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
python中如何进行连乘计算
2020/05/28 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
如何手工释放资源
2013/12/15 面试题
自主招生推荐信范文
2014/05/10 职场文书
学生吸烟检讨书
2014/09/14 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
余世维讲座观后感
2015/06/11 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js