asyncio.Semaphore控制协程并发量

# -*- coding: utf-8 -*-
# @Time    : 2020/10/12 12:03
# @Author  : Wanghairui

import asyncio
import time


async def main():
    # 控制并发数 20
    sem = asyncio.Semaphore(20)
    tasks = [asyncio.create_task(print_something("c"+str(i), sem)) for i in range(60)]
    start = time.perf_counter()
    await asyncio.gather(*tasks)
    print("运行结束")
    res = [t.result() for t in tasks]
    print(res)
    elapsed = (time.perf_counter() - start)
    print(elapsed)


async def print_something(thing, sem):
    async with sem:
        print(thing)
        await asyncio.sleep(3)
    return "A"


if __name__ == "__main__":
    asyncio.run(main())