gevent、asyncio协程操作

1、lua协程网络单请求处理:

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()
 
def task(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

async def task(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
def call_back(f):
    print('传入的参数为:' + f.result())

async def task(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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值