示例使用python执行高并发任务

举报
码乐 发表于 2025/10/22 09:04:46 2025/10/22
【摘要】 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 密集型任务。

2 异步网络任务方案 使用 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。