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正则表达式re模块详细介绍
May 29 Python
用Python输出一个杨辉三角的例子
Jun 13 Python
Python中urllib2模块的8个使用细节分享
Jan 01 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
如何对python的字典进行排序
Jun 19 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
golang/python实现归并排序实例代码
Aug 30 Python
django中cookiecutter的使用教程
Dec 03 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
php4的session功能评述(二)
2006/10/09 PHP
PHP可变函数学习小结
2015/11/29 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
Bootstrap精简教程
2015/11/27 Javascript
详解AngularJS中的http拦截
2016/02/09 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
2016/08/30 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
JS sort排序详细使用方法示例解析
2020/09/27 Javascript
Python创建文件和追加文件内容实例
2014/10/21 Python
Python selenium 三种等待方式解读
2016/09/15 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python调用win32接口进行截图的示例
2020/11/11 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
函授自我鉴定
2013/11/06 职场文书
女方婚礼新郎答谢词
2014/01/11 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
追悼词范文大全
2015/06/23 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript