gevent 实现单线程下的socket链接

通过gevent实现socket的多并发

server 端:

import geventfrom gevent import socket, monkey

monkey.patch_all()   #进行IO标记

def server(port):    s = socket.socket()    s.bind((‘localhost‘, port))    s.listen()    while True:        conn, addr = s.accept()        gevent.spawn(handle, conn) #一接收信号就进行IO切换

def handle(conn):    try:      data = conn.recv(1024)      print(data)      conn.send(data)      if not data:          conn.shutdown(socket.SHUT_WR) #如果没有数据就关掉socket    except exception as ex:        print(ex)    finally:        conn.close()

if __name__==‘__main__‘:    server(8000)

client 端:
import socket, time

client = socket.socket()client.connect((‘localhost‘, 6000))while True:    data = input(‘>>‘)    client.send(data.encode(‘utf-8‘))    if not data:        break

d = client.recv(1024)    print(‘recv:‘, d.decode())


原文地址:https://www.cnblogs.com/my-love-is-python/p/9164788.html

时间: 2024-07-31 08:02:01

gevent 实现单线程下的socket链接的相关文章

python全栈脱产第37天------进程池与线程池、协程、gevent模块、单线程下实现并发的套接字通信

一.进程池与线程池 调用concurrent.futures下的ThreadPoolExecutor,ProcessPoolExecutor来实现 提交任务有两种方式:同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,在执行下一段代码,是串行的 异步调用:提交完一个任务之后,不在原地等待,直接运行下一段代码,任务是并发的 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutorimp

python—day32 异步 + 回调 、Event、gevent 、协程、单线程下实现遇到IO切换

异步 + 回调:就是把下载好的东西回调主进程执行 或者回调给线程,哪个线程闲着就执行 1 #进程的异步 + 回调 2 # from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor 3 # 4 # import requests 5 # import os,time,random 6 # def get(url): 7 # print('%s get %s'%(os.getpid(),url) ) 8 # 9 # r

Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码

主要难点在于设置recv()与send()的超时时间,具体要注意的事项,请看代码注释部分,下面是代码: [cpp] view plaincopyprint? #include <stdio.h> #include <sys/types.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <string.h> #ifdef _WIN32   ///

Linux Socket - 基本socket链接

0x0000 Linux Socket 函数 bind listen connect accept send recv read write 0x0001 Server绑不上ip 报错位置在bind函数 [[email protected] 01]# ./server 191.168.80.151 1588 191.168.80.151 : 1588 Bind: Cannot assign requested address port已被占用 报错位置在bind函数 [[email protec

socket链接的关闭连接与close和shutdown的区别

TCP主动关闭连接 appl: close(), --> FIN FIN_WAIT_1 //主动关闭socket方,调用close关闭socket,发FIN <-- ACK FIN_WAIT_2 //对方操作系统的TCP层,给ACK响应.然后给FIN <-- FIN --> ACK "TIME_WAIT" -- 2MSL timeout -->CLOSED //TIME_WAIT,防止ACK没有给到对方. 注意:close时,如果TCP发送队列中还有数据,

一个复杂的Windows下的socket程序

上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序.异样,server.cpp 为效劳器端代码,client 为客户端代码.效劳器端代码 server.cpp: #include <stdio.h> #include <winsock2.h> #pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll int main(){ //初始化 DLL WSADATA ws

Wamp下drupal简洁链接的启用(clean urls)

Wamp下drupal简洁链接的启用 drupal中启用间接链接使本来不友好URL变的非常的友好,提高了网站的知名度,友好的url才能更好的被搜索引擎收藏.间接URL是靠Apache下的mod_rewrite来完成的.因此,得启用mod_rewrite模块. Path: ~\apache\apache2.4.9\conf下文件httpd.conf拷贝到apache\apache2.4.9\conf\extra\下,更名:httpd-drupal.conf. 启用mod_rewrite 打开文件h

windows下的socket网络编程(入门级)

windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先写了个简单的winSocket网路通信的例子,以便以后用到的时候有个参考. windows下使用winsock编程与linux/unix的区别在于windows下需要先有一个初始化的操作,结束的时候需要一个清理的操作.还有windows下编译的时候需要连接ws32_lib库. 大致过程如下 1.初始

winsock教程- windows下的socket编程(c语言实现)

winsock教程- windows下的socket编程(c语言实现) 使用winsock进行socket 编程 这是一个学习windows下socket编程(c语言)的快速指南.这是因为一下代码片段只能运行在windows下.windows API中的socket编程部分叫做winsock. 你电脑上做出的任何网络通信背后基本上都有socket,它是一个网络的基本组成部分.举个例子说当你在浏览器键入www.google.com的时候,socket连接到google.com并且取回那个页面然后才