python corouting 这样用法实际是线程池。
**************************************************************
import gevent
import time
from gevent import monkey
from urllib import request
monkey.patch_all() # 把当前程序的所有 IO 操作标记起来,否则模块无法知道 IO 操作
def func(url):
print('GET:', url)
resp = request.urlopen(url)
data = resp.read()
print('%i bytes received from %s' % (len(data), url))
urls = [
'
http://www.python.org/',
'
http://github.com/',
'
http://cnblogs.com/dbf-/',
]
time_start = time.time()
for item in urls:
func(item)
print('同步耗时:', time.time() - time_start)
async_time_start = time.time()
gevent.joinall([
gevent.spawn(func, '
http://www.python.org/'),
gevent.spawn(func, '
http://www.github.com/'),
gevent.spawn(func, '
http://cnblogs.com/dbf-/'),
])
print('异步耗时:', time.time() - async_time_start)
**************************************************************
类似 golang, 准确的说,goroutine更应该称为为线程池。
只是在语法上,跟coroutine类似,所以很多人都叫它协程。
**************************************************************
corouting 应该是交互式的; 我是这样来理解。
【 在 hgoldfish 的大作中提到: 】
: python asyncio 就是 coroutine,我发的文档都是用在 python coroutine 里面的。为什么说失去它的意义?
: python 的文档就是告诉你,coroutine 跟 thread 一样需要处理同步。所以用了 similar to 这个词啊。
: coroutine 没那么玄乎,只要你们承认 coroutine 就是用户态线程,它就没什么稀奇了。我还在 coroutine 上面实现了 map/each/apply 呢。
: ...................
--
FROM 115.52.184.*