[异步IO]
对于IO操作阻塞,可以使用多线程/多进程,然而线程/进程数有限,切换开销大,效率低。
同步IO不好解决,可以用异步IO:IO操作时,发出IO指令,然后就去处理其他代码,一段时间后再返回。这样,一个线程可以同时处理多个IO且不用等待,对于IO密集(如WEB服务器)很适合。
[协程 Coroutine]
又称作微线程。可以在一个子程序中中断,去执行其他子程序。而且协程中不用锁机制,效率高。
于是获得最高效率就是:多进程+协程。充分利用多核。
[asyncio]
Python3.4的标准库,直接支持异步IO
asyncio编程模型就是消息循环,从模块中获取一个EventLoop的引用,把需要执行的协程扔到其中去执行,就实现了异步IO。
import asyncio @asyncio.coroutine def hello(): print(‘hello world!‘) r=yield from asyncio.sleep(1) print(‘hello again!‘) loop=asyncio.get_event_loop() loop.run_until_complete(hello()) loop.close()
用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutin类型,然后在coroutine内部用yield from调用另一个coroutine实现异步操作。
时间: 2024-11-13 11:43:03