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中urllib2模块的8个使用细节分享
Jan 01 Python
深度定制Python的Flask框架开发环境的一些技巧总结
Jul 12 Python
详解Python中for循环是如何工作的
Jun 30 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
Pandas 同元素多列去重的实例
Jul 03 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
Python实现投影法分割图像示例(一)
Jan 17 Python
jupyter notebook中美观显示矩阵实例
Apr 17 Python
Python使用pyenv实现多环境管理
Feb 05 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 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极大的增强功能和性能
2006/10/09 PHP
php5.2时间相差8小时
2007/01/15 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
php修改时间格式的代码
2011/05/29 PHP
基于php无限分类的深入理解
2013/06/02 PHP
yii用户注册表单验证实例
2015/12/26 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
python 下载文件的几种方法汇总
2021/01/06 Python
酒后驾车标语
2014/06/30 职场文书
迎新生标语大全
2014/10/06 职场文书
化验员岗位职责
2015/02/14 职场文书
公司搬迁通知
2015/04/20 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
卖车协议书范文
2016/03/23 职场文书
导游词之青岛崂山
2019/12/27 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers