使用python实现并发任务
        【摘要】  1 简介本文示例如何实验Python 实现并发任务的两种方式写出对应版本 2 密集IO任务方案:使用 concurrent.futures.ThreadPoolExecutor适合 I/O 密集任务(比如网络请求、文件操作)    from concurrent.futures import ThreadPoolExecutor, as_completed    def worker(i)...
    
    
    
    1 简介
本文示例如何实验Python 实现并发任务的两种方式写出对应版本

2 密集IO任务方案:使用 concurrent.futures.ThreadPoolExecutor
适合 I/O 密集任务(比如网络请求、文件操作)
    from concurrent.futures import ThreadPoolExecutor, as_completed
    def worker(i):
        # 模拟工作(这里可以是 I/O 操作)
        # 例如:网络请求、文件写入等
        print(f"Worker {i} starting work")
        # do some work
        return f"Worker {i} done"
    def main():
        with ThreadPoolExecutor(max_workers=1000) as executor:
            futures = [executor.submit(worker, i) for i in range(1000)]
            for future in as_completed(futures):
                print(future.result())
    if __name__ == "__main__":
        main()
ThreadPoolExecutor 管理一个线程池。
每个任务在独立线程中执行。
as_completed() 用于等待所有任务完成。
Python 的线程调度由操作系统完成,而不是解释器。
受 GIL(全局解释器锁) 限制,多个线程不能同时执行纯 Python 代码(只能并发 I/O)。
因此它更适合 I/O 密集型 而非 CPU 密集型任务。
3 异步网络任务方案 使用 asyncio(协程方式)
适合大量异步任务(如网络请求)
    import asyncio
    async def worker(i):
        print(f"Worker {i} starting work")
        # 模拟 I/O 异步等待
        await asyncio.sleep(0.01)
        return f"Worker {i} done"
    async def main():
        tasks = [asyncio.create_task(worker(i)) for i in range(1000)]
        results = await asyncio.gather(*tasks)
        for r in results:
            print(r)
    if __name__ == "__main__":
        asyncio.run(main())
asyncio 是 Python 的原生异步框架。
每个 async def 函数是一个 协程(coroutine)。
await asyncio.gather() 并发调度 1000 个任务。
所有协程共享单线程事件循环,无线程开销。
无 GIL 瓶颈问题(因为单线程事件驱动)。
异步库性能上更接近 Go 的 goroutine 模型,但:
Go 的调度是多线程并行的;
asyncio 是单线程异步的。
4 小结
性能与扩展性对比
    特性  	Go (goroutines) 		Python ThreadPoolExecutor   Python asyncio
    并发机制    goroutine (轻量线程)    OS 线程   				单线程协程
    调度模型    M:N 调度(多核并行)    1:1 线程调度(受 GIL 限制)  单线程事件循环
    内存占用    ~2 KB/任务    		~8 MB/线程   			 ~几百字节/协程
    I/O 密集型性能   极佳  			良好  					极佳
    CPU 密集型性能   极佳(无 GIL)   较差(GIL 限制)  		较差(单线程)
    并发规模   	 上万 goroutine 无压力    上百线程会瓶颈 		上万协程轻松支持
    可扩展性    真正多核并行  			受 GIL 限制    		单核异步
Go 的 goroutine 模型 = 真并行 + 低开销;
Python 的 asyncio 模型 = 单线程 + 高并发 I/O。
二者都高效,但 Go 更适合 高并发、高吞吐的系统服务,Python 更适合 高延迟异步任务或快速开发脚本。
            【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
                cloudbbs@huaweicloud.com
                
            
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)