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

枣庄市建设项目环评备案网站工艺品网站建设开发

枣庄市建设项目环评备案网站,工艺品网站建设开发,澧县网页定制,做视频找素材的网站有哪些一、什么是进程? 进程(Process):操作系统分配资源的最小单位。每个运行中的程序就是一个进程。线程(Thread):进程内最小的执行单元,可看作轻量级进程。 💡 Python 的多…

一、什么是进程?

  • 进程(Process):操作系统分配资源的最小单位。每个运行中的程序就是一个进程。
  • 线程(Thread):进程内最小的执行单元,可看作轻量级进程。

💡 Python 的多线程受 GIL 限制,在 CPU 密集型任务中难以实现真正的并行。多进程是绕过 GIL、充分利用多核 CPU 的推荐方式。


二、基础用法:multiprocessing.Process

1. 创建进程

from multiprocessing import Process
import os, timedef task():time.sleep(2)print('子进程ID:', os.getpid())if __name__ == '__main__':print('主进程ID:', os.getpid())processes = []for _ in range(10):p = Process(target=task)p.start()processes.append(p)for p in processes:p.join()

2. 常用参数和方法

属性 / 方法说明
target执行函数
args / kwargs传参
start()启动进程
join(timeout)阻塞等待
is_alive()是否仍在运行
terminate()终止进程
daemon设置是否为守护进程
pid / exitcode进程 ID / 退出码

三、进程池:multiprocessing.Pool

1. 创建进程池并提交任务

from multiprocessing import Pool
import timedef task(name):time.sleep(2)print(f"{name} 执行完毕")if __name__ == '__main__':pool = Pool(processes=4)for i in range(6):pool.apply_async(task, args=(f"任务{i}",))  # 非阻塞方式pool.close()pool.join()

2. 方法说明

方法描述
apply()阻塞提交
apply_async()非阻塞提交,支持回调函数
close() / join()关闭进程池 / 等待结束

四、进程间通信

1. 使用 Pipe(管道)

from multiprocessing import Pipe, Processdef send_data(conn, data):conn.send(data)def receive_data(conn):print(conn.recv())if __name__ == '__main__':conn1, conn2 = Pipe()Process(target=send_data, args=(conn1, 'Hello')).start()Process(target=receive_data, args=(conn2,)).start()

2. 使用 Queue(队列)

from multiprocessing import Queue, Processdef set_data(q, val):q.put(val)def get_data(q):print(q.get())if __name__ == '__main__':q = Queue()Process(target=set_data, args=(q, '数据')).start()Process(target=get_data, args=(q,)).start()

五、进程同步(锁)

1. 不加锁的输出(可能混乱)

from multiprocessing import Process
import os, timedef task():print(f"{os.getpid()} start")time.sleep(2)print(f"{os.getpid()} end")for _ in range(3):Process(target=task).start()

2. 加锁保证输出顺序

from multiprocessing import Process, Lock
import os, timedef task(lock):with lock:print(f"{os.getpid()} start")time.sleep(2)print(f"{os.getpid()} end")if __name__ == '__main__':lock = Lock()for _ in range(3):Process(target=task, args=(lock,)).start()

六、共享状态

1. 使用共享内存:ValueArray

from multiprocessing import Process, Value, Arraydef modify(shared_num, shared_arr):shared_num.value = 100.5for i in range(len(shared_arr)):shared_arr[i] = -shared_arr[i]if __name__ == '__main__':num = Value('d', 0.0)arr = Array('i', range(5))p = Process(target=modify, args=(num, arr))p.start()p.join()print(num.value)print(arr[:])

2. 使用 Manager 提供的共享对象

from multiprocessing import Process, Managerdef modify(shared_dict, shared_list):shared_dict[1] = '一'shared_list.reverse()if __name__ == '__main__':with Manager() as manager:d = manager.dict()l = manager.list(range(5))p = Process(target=modify, args=(d, l))p.start()p.join()print(d)print(l)

七、实战总结

应用场景推荐方案原因说明
CPU 密集型任务多进程绕过 GIL,真正多核并行
I/O 密集型任务多线程 / 协程利用线程或异步释放等待时间
多任务并发管理进程池(Pool)简化进程创建与调度,避免资源浪费
多进程通信Pipe / Queue实现进程间数据传输
状态共享Value / Array / Manager灵活、安全地在进程间共享数据

八、推荐阅读

  • 📚 官方文档:multiprocessing — Process-based parallelism
http://www.dtcms.com/wzjs/839176.html

相关文章:

  • 企业网站推广营销网站结构设计怎么写
  • 做网站外包大学生深圳软件公司定制开发
  • ui做的好的网站品牌产品策划方案
  • 免费网站建设模板下载自动连点器
  • 怎么做网站一个平台可以做ppt的网站
  • 网站调研方法有哪些内容网站开发合同审核要点
  • 桂林北站到象鼻山景区怎么坐车wordpress怎么做双语站
  • 做网站的5要素互联网销售
  • 建设厅网站上报名网站过期后
  • 网站中的公司地址怎么做外贸获客渠道有哪些
  • 章丘建设局网站单产品网站建设
  • 织梦做音乐网站寻找合肥网站建设
  • 企业网站的推广形式有wordpress 加入引导页
  • 农产品网站策划大同网站建设制作哪家好
  • 经典网站建设方案长锦船公司网站
  • 高碑店做网站的公司做网站推广托管注意
  • dedecms网站怎么搬家删除wordpress
  • 做视频网站注意事项东城区网站排名seo
  • iis 网站没有上传权限程序员分为六个等级
  • 关于手表的网站贵阳花果园r区网站建设
  • 营销型网站用什么系统工商局网站实名认证怎么做
  • 口碑营销平台短视频seo服务
  • 服装 营销型网站案例wordpress cloud fountry
  • 大连 做网站网站建设7个基
  • 网站建设设计时代创信好wordpress云储存缩略图wpjam
  • 网站建设完成汇报北京企业官网网站建设报价
  • 高端手机网站设计wordpress默认中文
  • 怎么通过做网站来赚钱吗天津在线制作网站
  • 有微重庆网站吗企业管理系统项目经历
  • 江西省住房保障建设厅网站兰州seo关键词优化