当前位置: 首页 > news >正文

python 中线程、进程、协程

1.线程和线程池

 t1 =  threading.Thread(target = task, args=("a"))t2 =  threading.Thread(target = task, args=("b"))with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:executor.map(task, ["A,B,C,D"])
threads = [threading.Thread(target = increment()) for _ in range(4)]for t in threads:t.start()for t in threads:t.join()
count = 0
lock = threading.Lock()
def increment():global countfor i in range(100):with lock:count +=1

2.进程和进程池

def send(conn):conn.send("helloworld")
def receive(conn):print(conn.recv())val =  multiprocessing.Value("i",1) // 共享变量queue = multiprocessing.Queue()process = multiprocessing.Process(target = worker,args= (queue,))process2 = multiprocessing.Process(target = worker, args=(queue,))process.start()process2.start()process.join()process2.join()with concurrent.futures.ProcessPoolExecutor(5) as executor:executor.map(worker,["a","b","c","d"])processes = [multiprocessing.Process(target = printVal, args =(val,))for _ in range(4)]for process in processes:process.start()for process in processes:process.join()

asyncio  

async def cpu_bound_task(n):total = 0for i in range(10**8):total += i*nprint(f"total is {total}")await asyncio.sleep(10)return total
def event_loop(n):asyncio.run(cpu_bound_task(n))
async def main():loop = asyncio.get_event_loop()with ProcessPoolExecutor() as pool:result = await loop.run_in_executor(pool,cpu_bound_task, 10)print(f"result is {result}")
for i in range(4):p = multiprocessing.Process(target= event_loop, args=(10,))pList.append(p)p.start()for p in pList:p.join()
asyncio.run(main())
print("主线程执行结束")

五、总结

方案适用场景主要特性
多线程(threading)I/O 密集型(爬虫、文件 I/O)共享内存,受 GIL 限制
线程池(ThreadPoolExecutor)并发 I/O 任务自动管理线程
多进程(multiprocessing)CPU 密集型任务多核计算,不受 GIL 限制
进程池(ProcessPoolExecutor)大规模计算任务自动管理进程
协程(asyncio)I/O 高并发(API、爬虫)非阻塞执行
如何选择?
  1. CPU 密集型任务(科学计算、数据分析) → 多进程
  2. I/O 密集型任务(爬虫、数据库查询) → 多线程 或 asyncio
  3. 高并发任务(网络请求、日志处理) → asyncio

相关文章:

  • 【动作】AVA:时空定位原子视觉动作视频数据集
  • java 数据结构-HashMap
  • 零基础玩转物联网-串口转以太网模块如何快速实现与MQTT服务器通信
  • 如何提升企微CRM系统数据的准确性?5大核心策略详解
  • opencv RGB图像转灰度图
  • 华为云Flexus+DeepSeek征文 | 华为云ModelArts Studio快速上手:DeepSeek-R1-0528商用服务的开通与使用
  • 软件定义汽车的转型之路已然开启
  • SkyWalking 10.2.0 SWCK 配置过程
  • ARM内存理解(一)
  • AutoCAD 2024 保姆级安装教程【2025最新】(附安装包)
  • 智能卷料系统仿真|从动建模到零停机优化—MapleSim卷料处理库工业级解决方案
  • 使用 VSCode 开发 FastAPI 项目(1)
  • 华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建联网大模型
  • VScode - 我的常用插件01 - 主题插件Noctis
  • 【Css】css修改滚动条的样式
  • flutter基础面试知识汇总(二)
  • HMTL+CSS+JS-新手小白循序渐进案例入门
  • Neo4j 图数据库安装教程(2024最新版)—— Windows / Linux / macOS 全平台指南
  • java生成PDF合并单元格
  • 电路图识图基础知识-电机顺序启动控制电路解析(二十二)
  • 教务系统网站建设模板下载/西安百度首页优化
  • 河南建设工程信息网 就上平台中项网/seo基础篇
  • 建设网站需申请什么资料/百度基木鱼建站
  • java 做网站 模板在哪可以下/app推广工作是做什么的
  • 微商城手机网站制作公司/济南网站优化
  • 个体户备案网站可以做企业站吗/谷歌网址