[python][asyncio] 争议模块 asyncio 的基础学习---未完待续

今天这个先来了解一下asyncio的 在python3中的使用, 

1,python3 的异步协程和python2以及3的老版本有比较大的差别

2, 目前 我本地的python3 在pip install -m asyncio 之后就能运行这些程序 ,反倒是anaconda 下边的 jupyter book 运行出错

3,通过 task的for 循环模式和  gather 来完成

 

# python 协程
# multiproc, asyncio
import time
import asyncio
'''1
def crawl_page(url):
    print('crawling{}'.format(url))
    sleep_time=int(url.split('_')[-1])
    time.sleep(sleep_time)
    print('OK {}'.format(url))
    
def main(urls):
    for url in urls:
        crawl_page(url)

%time main(['url_1','url_2','url_3','url_4'])
'''


'''2 to_be_verified,暂时无法运行,等等更新版本和包
async def crawl_page(url):
    print('crawling {}'.format(url))
    sleep_time=int(url.split('_')[-1])
    await asyncio.sleep(sleep_time)
    print('OK {}'.format(url))
    
async def main(urls):
    for url in urls:
        await crawl_page(url)
        
#%time 
asyncio.run(main(['url_1','url_2','url_3','url_4']))        
'''
# 
'''3
import asyncio
async def crawl_page(url):
    print('crawling{}'.format(url))
    sleep_time=int(url.split('_')[-1])
    await asyncio.sleep(sleep_time)
    print('OK {}'.format(url))
    
async def main(urls):
    tasks=[asyncio.create_task(crawl_page(url)) for url in urls]
    for url in urls:
        await crawl_page(url)
#%time
asyncio.run(main(['url_1','url_2','url_3','url_4']))
# 通过 tasks =[asyncio.create_task(crawl_page(url))for url in urls]
'''

# tasks 另一种做法:
# await asyncio.gather(*tasks)
#'''4
async def crawl_page(url):
    print('crawling{}'.format(url))
    sleep_time=int(url.split('_')[-1])
    await asyncio.sleep(sleep_time)
    print('OK {}'.format(url))
    
async def main(urls):
    tasks=[asyncio.create_task(crawl_page(url)) for url in urls]
    await asyncio.gather(*tasks)
#%time
asyncio.run(main(['url_1','url_2','url_3','url_4']))

#'''

# 解密协成
# 多个函数并行执行,可以通过设置 task.cancle 来设置
# 注意 return exception的情况
# queue的使用 , 生产和消费模型

 

posted @ 2019-07-01 18:28  allen514519  阅读(229)  评论(0)    收藏  举报