简体   繁体   中英

Python asyncio.gather returns None

I'm using Python asyncio to implement a fast http client.

As you can see in the comments below inside the worker function I get the responses as soon as they are finished. I would like to get the responses ordered and this is why I'm using asyncio.gather.

Why is it returning None? Can anybody help?

Thank you so much!

import time
import aiohttp
import asyncio

MAXREQ = 100
MAXTHREAD = 500
URL = 'https://google.com'
g_thread_limit = asyncio.Semaphore(MAXTHREAD)


async def worker(session):
    async with session.get(URL) as response:
        await response.read()   #If I print this line I get the responses correctly

async def run(worker, *argv):
    async with g_thread_limit:
        await worker(*argv)

async def main():
    async with aiohttp.ClientSession() as session:
        await asyncio.gather(*[run(worker, session) for _ in range(MAXREQ)])

if __name__ == '__main__':
    totaltime = time.time()
    print(asyncio.get_event_loop().run_until_complete(main()))   #I'm getting a None here
    print (time.time() - totaltime)

Your function run doesn't return nothing explicitly, so it returns None implicitly. Add return statement and you'll get a result

async def worker(session):
    async with session.get(URL) as response:
        return await response.read()


async def run(worker, *argv):
    async with g_thread_limit:
        return await worker(*argv)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM