python-select异步IO

 1 #实现多任务在同一个线程切换
 2 #!/usr/bin/python
 3
 4 from socket import *
 5 from select import *
 6 from time import ctime
 7
 8 sockob=socket(AF_INET,SOCK_STREAM)
 9 sockob.bind(("127.0.0.1",7777))
10 sockob.listen(5)
11 inputs=[sockob]
12 while 1:
13     rs,ws,es=select(inputs,[],[])
14     for i in rs:
15         if i==sockob:
16             connob,addr=sockob.accept()
17             print "connect from",addr
18             inputs.append(connob)
19         else:
20             try:
21                 data=i.recv(1024)
22                 disconnect=not data
23             except:
24                 disconnect=True
25             if disconnect:
26                 print i.getpeername(),"disconnect"
27                 inputs.remove(i)
28                 i.close()
29             else:
30                 i.send("[%s]:%s"%(ctime(),data))
31
32 sockob.close()
时间: 2024-12-16 02:05:24

python-select异步IO的相关文章

python之异步IO

协程的用武之地 并发量较大的系统和容易在IO方面出现瓶颈(磁盘IO,网络IO),采用多线程.多进程可以解决这个问题,当然线程.进程的切换时很消耗资源的.最好的解决方案是使用单线程方式解决并发IO问题--这就是协程发挥作用之处. 协程其实就是单线程在调度,是无法利用多核CPU,所以对于计算密集型的任务还是需要考虑多进程+协程的方式. 参考: http://blog.csdn.net/qq910894904/article/details/41699541 http://www.cnblogs.co

Python学习---Python的异步IO[all]

1.1.1. 前期环境准备和基础知识 安装: pip3 install aiohttp pip3 install grequests pip3 install wheel pip3 install scrapy 注意: windows上scrapy依赖 https://sourceforge.net/projects/pywin32/files/ 安装Twisted a. http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted, b. 下载:Twis

如何用python实现异步io

在IO编程一节中,我们已经知道,CPU的速度远远快于磁盘.网络等IO.在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件.发送网络数据时,就需要等待IO操作完成,才能继续进行下一步操作.这种情况称为同步IO. 在IO操作的过程中,当前线程被挂起,而其他需要CPU执行的代码就无法被当前线程执行了. 因为一个IO操作就阻塞了当前线程,导致其他代码无法执行,所以我们必须使用多线程或者多进程来并发执行代码,为多个用户服务.每个用户都会分配一个线程,如果遇到IO导致线程被挂起,其他

Python黑魔法 --- 异步IO( asyncio) 协程

https://www.jianshu.com/p/b5e347b3a17c python asyncio 网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态.使用协程可以实现高效的并发任务.Python的在3.4中引入了协程的概念,可是这个还是以生成器对象为基础,3.5则确定了协程的语法.下面将简单介绍asyncio的使用.实现协程的不仅仅是asyncio,tornado和g

python的异步IO模块

asyncio模块:示例一 import asyncio @asyncio.coroutine def func1(): print('before...func1......') yield from asyncio.sleep(5) print('end...func1......') tasks = [func1(), func1()] loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather(*tasks

【python】异步IO

No1: 协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行. 优势: 1.最大的优势就是协程极高的执行效率.因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显. 2.不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多. No2: 因为协程是一个线程执行,那怎么利用多核CPU呢?

初始Python的异步IO操作(待完善)

1 import aiohttp 2 import asyncio 3 4 def consumer(): 5 r='' 6 while True: 7 n = yield r 8 if n: 9 r='200 OK' 10 print('客户取走了%s'%(str(n))) 11 else: 12 print('没货') 13 14 def producer(c): 15 n=0 16 c.send(None) 17 while n<5: 18 n+=1 19 print('生产了%s'%(s

python select的使用

使用异步io实现只使用单进程,单线程的socket.处理多个用户的请求. 先简单说明一下select异步io工作原理: select 是一个跨平台的异步io模型,由于我们计算机的硬盘速度,远远低于我们内存的速度,因此如果同时有多个用户来请求数据时候,io效率就会变得更慢. 而select 是一直不断在监控我们网络接口的.如果我们的服务器网络接收到,一个用户的请求,就会在系统的某个路径下面,生成一个文件描述符,select就是不断的在监控这些文件描述符(即每个用户的连接),如果连接进来了,就会调用

python 协程, 异步IO Select 和 selectors 模块 多并发演示

主要内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 selectors 模块 多并发演示 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈.因此: 协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开

# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # Select\Poll\Epoll异步IO 以及selectors模块 # Python队列/RabbitMQ队列

1 # 进程/线程/协程 2 # IO:同步/异步/阻塞/非阻塞 3 # greenlet gevent 4 # 事件驱动与异步IO 5 # Select\Poll\Epoll异步IO 以及selectors模块 6 # Python队列/RabbitMQ队列 7 8 ############################################################################################## 9 1.什么是进程?进程和程序之间有什么