asyncio(模拟针对异步io数据的抓取)
import asyncio ''' 针对url相同而请求所携带的参数不同编写的一个异步io解决案例 ''' async def get_request(data):#被async修饰的函数就是一个协程对象 ''' 模拟异步请求(多任务当中出现同步代码就不能使用异步操作) :param data: :return: ''' await asyncio.sleep(2) #基于异步模块模拟异步任务 #await 关键字手动挂起异步阻塞 url = 'www.xiecheng.com' print(url,data) #模拟请求携带不同参数 def callback(task): pass datelist = [ '2020-01-10', '2020-01-11', '2020-01-12', '2020-01-13', '2020-01-14', ] listcity = { '北京':'郑州', '上海':'大连', '深圳':'江苏', '广州':'哈尔滨', '杭州':"沈阳", '南京':'新疆', } task_list=[] #定义任务列表用来存放任务 for date in datelist: # for city in listcity: # 循环创建任务 data = { 'start':city, 'arr':listcity.get(city), 'date':date, } r = get_request(data) task = asyncio.ensure_future(r)#创建任务对象 task_list.append(task) #将任务对象添加到任务列表中 loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(task_list)) #将任务列表封装到wait对象中
'''
笔记
event_loop(事件循环):相当于一个无限循环,我们可以把一些函数注册到这个事件循环上,当满座某些条件的时候,函数就会被循环执行
coroutine(协程对象):我们可以将协程对象注册到时间循环中,它会被事件循环调用。我们可以使用async关键字来定义一个方法
,这个方法在调用的时候不会被立即执行,而是返回一个协程对象。
task(任务):他是写成对象的进一步封装,包含任务的哥哥状态。
future:代表将来执行或者还没有执行的任务,实际上和task没有什么区别
async:定义一个协程
await:用来挂起阻塞方法的执行
'''
aiohttp https://www.cnblogs.com/lcy-123/p/14086950.html

浙公网安备 33010602011771号