zoukankan      html  css  js  c++  java
  • 测试python同步异步执行方式

    1. 代码

    import time 
    import asyncio 
    from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
    
    def job(num):
        print(f'job {num}: start...')
        time.sleep(num)
        print(f'job {num}: end ...')
    
    
    def elasped(func, num, s):
        print('-'*3, s, '-'*3)
        t0 = time.time()
        func(num)
        print(f'Complished in {time.time()-t0:.2f}s')
    
    def sync(num):
        for i in range(1, num):
            job(i)
    
    def thread_async(num):
        workers = num 
        with ThreadPoolExecutor(workers) as executor: 
            executor.map(job, range(1, num))
    
    def process_async(num):
        workers = num 
        with ProcessPoolExecutor(workers) as executor: 
            executor.map(job, range(1, num))
    
    async def coroutine_async(num):
        async def job(num):
            print(f'job {num}: start...')
            await asyncio.sleep(num)
            print(f'job {num}: end ...')
    
        await asyncio.gather(*[job(i) for i in range(1, num)])
    
    def elasped2(func, num, s):
        print('-'*3, s, '-'*3)
        t0 = time.time()
        asyncio.run(func(num))
        print(f'Complished in {time.time()-t0:.2f}s')
        
    
    
    if __name__ == '__main__':
        elasped(sync, 4, '同步执行') 
        elasped(thread_async, 4, '异步执行(多线程)')
        elasped(process_async, 4, '异步执行(多进程)')
        elasped2(coroutine_async, 4, '异步执行(协程)')
    

    2. 结果

    --- 同步执行 ---
    job 1: start...
    job 1: end ...
    job 2: start...
    job 2: end ...
    job 3: start...
    job 3: end ...
    Complished in 6.00s
    --- 异步执行(多线程) ---
    job 1: start...
    job 2: start...
    job 3: start...
    job 1: end ...
    job 2: end ...
    job 3: end ...
    Complished in 3.00s
    --- 异步执行(多进程) ---
    job 1: start...
    job 2: start...
    job 3: start...
    job 1: end ...
    job 2: end ...
    job 3: end ...
    Complished in 3.03s
    --- 异步执行(协程) ---
    job 1: start...
    job 2: start...
    job 3: start...
    job 1: end ...
    job 2: end ...
    job 3: end ...
    Complished in 3.00s
    
  • 相关阅读:
    webbench之使用(二)
    webbench之编译安装(一)
    Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍
    OneThink开发框架
    性能瓶颈调优
    Jmeter之Web端HTTP性能测试(九)
    RobotFramework自动化测试之脚本编写(一)
    LoadRunner之安装、破解、汉化教程(一)
    Java学习之Thread方法
    Java学习之线程通信(多线程(Lock))--生产者消费者
  • 原文地址:https://www.cnblogs.com/lyg-blog/p/13583648.html
Copyright © 2011-2022 走看看