网络爬虫(十三)

协程移步执行

主要注意:
  • 当作任务执行的函数前面要加async修饰。async def req(url):
  • 在被当做任务调用的函数(如async def req(url)函数)中,如果用于异步,函数中的语句必须是支持异步,在req(url)函数中,time.sleep()就是同步的语句,在函数运行时不会出错,但会同步执行,必须用asyncio.sleep(2)这个能异步执行语句才能实现异步执行。
  • 生成协程任务用: task=asyncio.ensure_future(c)
  • 放入的任务要用asyncio.wait(tasks)才能实现异步执行
    loop=asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))
import time
tasks=[]
urls=['url1','url2','url3','url4']
async def req(url):
    print('start')
    asyncio.sleep(2)#这是异步执行语句
    #time.sleep()#这是同步执行语句,所以不能用这种语句
    print('end')
for url in urls:
    c=req(url)
    task=asyncio.ensure_future(c)
    tasks.append(task)
loop=asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
网络爬虫(十三)_第1张图片
演讲

你可能感兴趣的:(网络爬虫(十三))