zoukankan      html  css  js  c++  java
  • aiohttp/asyncio 多次请求

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    __author__ = "Daniel Altiparmak (sixfinger78@gmail.com)"
    __copyright__ = "Copyright (C) 2015 Daniel Altiparmak"
    __license__ = "GPL 3.0"
    
    
    import asyncio
    import aiohttp
    import tqdm
    
    import string
    import random
    
    # get content and write it to file
    def write_to_file(filename, content):
        f = open(filename, 'wb')
        f.write(content)
        f.close()
    
    # a helper coroutine to perform GET requests:
    @asyncio.coroutine
    def get(*args, **kwargs):
        response = yield from aiohttp.request('GET', *args, **kwargs)
        return (yield from response.read_and_close())
    
    
    @asyncio.coroutine
    def download_file(url):
        # this routine is protected by a semaphore
        with (yield from r_semaphore):
            content = yield from asyncio.async(get(url))
    
            # create random filename
            length = 10
            file_string = ''.join(random.choice(
                string.ascii_lowercase + string.digits) for _ in range(length)
                                  )
            filename = '{}.png'.format(file_string)
    
            write_to_file(filename, content)
    
    '''
    make nice progressbar
    install it by using `pip install tqdm`
    '''
    @asyncio.coroutine
    def wait_with_progressbar(coros):
        for f in tqdm.tqdm(asyncio.as_completed(coros), total=len(coros)):
            yield from f
    
    
    images = ['http://lorempixel.com/1920/1920/' for i in range(100)]
    
    
    # avoid to many requests(coroutines) the same time.
    # limit them by setting semaphores (simultaneous requests)
    r_semaphore = asyncio.Semaphore(10)
    
    coroutines = [download_file(url) for url in images]
    eloop = asyncio.get_event_loop()
    #eloop.run_until_complete(asyncio.wait(coroutines))
    eloop.run_until_complete(wait_with_progressbar(coroutines))
    eloop.close()
    

      

  • 相关阅读:
    hibernate01
    利用Struts2拦截器完成文件上传功能
    layui的CRUD案例
    最大流dinic模板 poj1273
    CodeForces
    POJ 2139 Six Degrees of Cowvin Bacon (floyd)
    POJ 3259 Wormholes (floyd或者spfa)
    POJ 3615 Cow Hurdles (flyod)
    Codeforces Round #446 (Div. 1) A. Pride
    Educational Codeforces Round 34 A. Hungry Student Problem
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9025588.html
Copyright © 2011-2022 走看看