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
    
  • 相关阅读:
    笑笑
    DoEvents应用
    疑问:感情是骗来的,爱情是睡过的?
    心情不好怎么办
    VB中窗体最顶和最底
    工作之余,轻松一下,笑笑吧.
    SQL Server无日志恢复数据库
    爬虫与Python:(二)Python基础篇——7.列表
    爬虫与Python:(二)Python基础篇——6.编码
    爬虫与Python:(二)Python基础篇——5.字符串
  • 原文地址:https://www.cnblogs.com/lyg-blog/p/13583648.html
Copyright © 2011-2022 走看看