coConsume = coroutine.create(
function (filter, producer)while true do
local stutas, msg = coroutine.resume(filter, producer)print('receive msg : ', msg)
end
end
)
coFilter = coroutine.create(
function (producer)while true do
local _, msg = coroutine.resume(producer)
msg = msg..': '..string.len(msg)
coroutine.yield(msg)
end
end
)
coProducer = coroutine.create(
function ()while true do
local msg = io.read()
coroutine.yield(msg)
end
end
)
coroutine.resume(coConsume, coFilter, coProducer)
2、python协程
gevent协程操作
import gevent
import requests
from gevent import monkey
monkey.patch_socket()deftask(url):
r = requests.get(url)print('%s bytes received from %s'%(len(r.text), url))
urls =['https://www.baidu.com/','https://www.qq.com/','https://www.jd.com/']
gevent.joinall([gevent.spawn(task,x)for x in urls])
asyncio协程操作
import asyncio
import requests
asyncdeftask(url):
r = requests.get(url)print('%s bytes received from %s'%(len(r.text), url))
urls =['https://www.baidu.com/','https://www.qq.com/','https://www.jd.com/']
tasks =[task(url)for url in urls]# 注册多个协程对象的方法。
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
asyncio协程,添加回调函数
import asyncio
import requests
defcall_back(f):print('传入的参数为:'+ f.result())asyncdeftask(url):
r = requests.get(url)print('%s bytes received from %s'%(len(r.text), url))return url
urls =['https://www.baidu.com/','https://www.qq.com/','https://www.jd.com/']
tasks =[]
loop = asyncio.get_event_loop()for x in urls:
coroutine = task(x)# taskAsync = loop.create_task(coroutine)
taskAsync = asyncio.ensure_future(coroutine)
taskAsync.add_done_callback(call_back)
tasks.append(taskAsync)
loop.run_until_complete(asyncio.wait(tasks))
loop.close()