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中截取字符函数strip,lstrip,rstrip
Jul 17 Python
python获取多线程及子线程的返回值
Nov 15 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
Django中在xadmin中集成DjangoUeditor过程详解
Jul 24 Python
Flask框架学习笔记之模板操作实例详解
Aug 15 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
Window系统下Python如何安装OpenCV库
Mar 05 Python
python构造IP报文实例
May 05 Python
Python函数__new__及__init__作用及区别解析
Aug 31 Python
python字典按照value排序方法
Dec 28 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 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下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
javascript列表框操作函数集合汇总
2013/11/28 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
vue内置指令详解
2018/04/03 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
js原生map实现的方法总结
2020/01/19 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现八大排序算法(1)
2017/09/14 Python
Python自定义线程类简单示例
2018/03/23 Python
pandas对指定列进行填充的方法
2018/04/11 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
Python实现井字棋小游戏
2020/03/09 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
幼儿园教师辞职信
2014/01/18 职场文书
快餐公司创业计划书
2014/04/29 职场文书
应用心理学专业求职信
2014/08/04 职场文书