爬虫用到协程的内容
- coroutine:协程对象,用async关键字定义一个方法,就返回一个协程对象。下面的c就是一个协程对象,它不会立即执行。
async def coroutin_obj(url):
print(url)
c=coroutin_obj('http://www.test.com')
- get_event_loop()建立事件循环对象。
loop=asyncio.get_event_loop()
- task:对协程对象进行封装,包含任务各种状态,用法如下:
import asyncio
async def coroutin_obj(url):
print(url)
c=coroutin_obj('http://www.test.com')
loop=asyncio.get_event_loop()
task= loop.create_task(c)#c是上面建立的协程对象。
loop.run_until_complete(task)#执行任务
import asyncio
async def coroutin_obj(url):
print(url)
c=coroutin_obj('http://www.test.com')
loop=asyncio.get_event_loop()
fu= asyncio.ensure_future(c)
loop.run_until_complete(fu)
import asyncio
async def coroutin_obj(url):
print(url)
return 'ok'
def call_back(future):
print('调用完成',future.result())
return True
c=coroutin_obj('http://www.test.com')
loop=asyncio.get_event_loop()
fu= asyncio.ensure_future(c)
fu.add_done_callback(call_back)# 绑定回调
loop.run_until_complete(fu)