server:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author aliex-hrg
import gevent
from gevent import socket
def server(port):
s = socket.socket()
s.bind(('0.0.0.0', port))
s.listen(500)
while True:
conn,addr = s.accept() #等待连接进来,没有连接一直挂起
gevent.spawn(func,conn) #进来连接了,交给协程执行func函数,func无限收发数据,这中间遇到io切换
def func(conn):
try:
while True:
recv = conn.recv(8096)
print("recv:%s" %recv.decode())
resp = recv.decode().upper()
conn.send(resp.encode())
except Exception as e:
print(e)
finally:
conn.close()
if __name__ == '__main__':
server(5000)

  client:

import socket
sock = socket.socket()
sock.connect(('127.0.0.1',5000))
flag = False
while not flag:
data = input(">>:").strip()
if len(data) == 0:continue
sock.send(data.encode()) #如果是发送一个空值,虽然显示是发出去了,但对方却认为你没发
recv_data = sock.recv(8096)
print("recv:",recv_data.decode())
sock.close()

  

协程实现多并发socket,跟NGINX一样的更多相关文章

  1. python多进程单线程+协程实现高并发

    并发:看起来像同时运行就是并发 并行:同一时间同时被执行叫做并行,最大并行数就是CPU核数 协程不是实实在在存在的物理基础和操作系统运行逻辑,只是程序员从代码层面避开了系统对遇到IO的程序会切走CPU ...

  2. python 并发编程 基于gevent模块 协程池 实现并发的套接字通信

    基于协程池 实现并发的套接字通信 客户端: from socket import * client = socket(AF_INET, SOCK_STREAM) client.connect(('12 ...

  3. 并发编程中死锁、递归锁、进程/线程池、协程TCP服务器并发等知识点

    1.死锁 定义; 类似两个人分别被囚禁在两间房子里,A手上拿着的是B囚禁房间的钥匙,而B拿着A的钥匙,两个人都没法出去,没法给对方开锁,进而造成死锁现象.具体例子代码如下: # -*-coding:u ...

  4. 想使用gevent、mysql、sqlalchemy实现python项目协程异步达到并发的效果

    如题,但是查看了很多资料,都说python这边的mysql不支持异步并发,只能阻塞进行,心塞30秒,暂时放弃这方面的研究 如果不操作数据库的化,比如请求url.操作文件,还是可以用gevent来异步实 ...

  5. 用协程实现高并发I/O(async)

    对于并发要求比较法的I/O需求,可以用python的协程去处理. 重点: 1启动协程必须做一次函数调用 2协程激活只占用1kb内存,所以协程很多也问题不大 3这种效果需要使用关键字async和awai ...

  6. 高并发 Nginx+Lua OpenResty系列(11)——流量复制/AB测试/协程

    流量复制 在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线.这其实就需要进 ...

  7. 百万年薪python之路 -- 并发编程之 协程

    协程 一. 协程的引入 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两 ...

  8. 协程--gevent模块(单线程高并发)

    先恶补一下知识点,上节回顾 上下文切换:当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行.这种 ...

  9. web服务-2、四种方法实现并发服务器-多线程,多进程,协程,(单进程-单线程-非堵塞)

    知识点:1.使用多线程,多进程,协程完成web并发服务器 2.单进程-单线程-非堵塞也可以实现并发服务器 1.多进程和协程的代码在下面注释掉的部分,我把三种写在一起了 import socket im ...

随机推荐

  1. chrome插件 - Manifest文件中的 background

    在Manifest中指定background域可以使扩展常驻后台. background可以包含三种属性,分别是scripts.page和persistent. 如果指定了scripts属性,则Chr ...

  2. POWER BI报表服务器混合云初了解

    Power BI报表服务器 购买Power BI Premium时,你可以获取2个产品,一个是Power BI Service另外一个是Power BI Report Server. Power BI ...

  3. SpringBatch Sample (一)(Hello World)

    通过前面两篇关于Spring Batch文章的介绍,大家应该已经对Spring Batch有个初步的概念了.这篇文章,将通过一个”Hello World!”实例,和大家一起探讨关于Spring Bat ...

  4. Java中的this关键字老生常谈

    一.this的由来  this关键字就是获得调用当前方法对象的引用. 二.注意点 this关键字只能出现在方法内部,完成对调用该方法的对象的引用. 三.this关键字的三个用处 1.最主要的用处: 获 ...

  5. ss linux终端配置

    最近ss莫名宕机,懒得重新安装了,就安装了一个非gui版本,安装非gui版本还有一个优点就是在远程服务器的时候可以用proxychains进行终端代理,非常友好实用.下面简单的说一下如何进行终端ss ...

  6. Sublime 官方安装方法

    1. Crtl + ` : 进入控制台模式 2. 复制下面相应版本的代码,按Enter键运行 Sublime Text 3 import urllib.request,os,hashlib; h = ...

  7. Gym.101908 Brazil Subregional Programming Contest(寒假自训第六场)

    这几天睡眠时间都不太够,室友晚上太会折腾了,感觉有点累,所以昨天的题解也没写,看晚上能不能补起来. B . Marbles 题意:给定N组数(xi,yi),玩家轮流操作,每次玩家可以选择其中一组对其操 ...

  8. django HttpResponse的用法

    一.传json字典 def back_json(rquest): #JsonResponse父类是HttpResponse,原码里调用了json.dumps() from django.http im ...

  9. Python中元组、列表、字典的遍历和相互转化

    一.元组,列表,字典的遍历 1.1 元组的遍历 元组的遍历借助 range() 函数,基本思想是通过元组的长度使用for循环进行遍历,代码如下:     fruits=("apple&quo ...

  10. Go Example--超时处理

    package main import ( "fmt" "time" ) func main() { c1 := make(chan string, 1) go ...