

学完多进度,脑子疼了三天。
讲义说 fork 很浮浅,实质写出来一堆僵尸进度;Python 官方文档写得跟谜语相通,Pool 不关就卡死;查辛苦发现 Linux 内核里根柢没“进度”这个东西,全是 task_struct 堆出来的。
我试过用 Process 跑一个算 π 的轮回,四核 CPU 才快了 3.2 倍,不是 4 倍。其后才显著,`os.fork` 后子进度要再行加载 Python 解说器气象,还有模块缓存、日记句柄、以致某些 C 延迟对象,全得 copy-on-write 迟缓来。不是代码不成,是内核在悄悄拖后腿。
管谈那块我踩得最惨。写了个父进度往 pipe 里写字符串,子进度读,遵循子进度卡死不动。查半天才发现 `os.pipe` 复返的两个 fd,父进度没关掉读端,子进度就一直等数据——Linux 内核得等统共写端王人关了才发 EOF。这事儿没东谈主告诉你,文档里就一滑字:“The pipe has two ends”。

音讯队伍试了 POSIX 版的 `mq_open`,编译非得加 `-lrt`,否则平直报 undefined reference。跑通明发现发个音讯要拷贝两次:用户空间进内核空间,再从内核进接受进度的用户空间。比 pipe 还多一次。速率不快,但好赖能跨不联系进度传,不像 pipe 只可父子用。
分享内存看着快,真上手就懵。`shm_open` 创建,`ftruncate` 设大小,`mmap` 映射,三步不可偏废。更贫穷的是——它不认真同步。我让两个子进度同期往归拢个 int 里加 1,跑十次遵循有七次是 19,不是 20。其后加了 `sem_wait` 和 `sem_post`,才稳住。但信号量也得用 `sem_unlink` 计帐,否则下次运行说“资源忙”。
Python 的 `multiprocessing.Queue` 我一运行当等闲 queue 用,遵循发现它底层其实是用 pipe + 一个 watchdog 进度达成的。传大列表时会序列化成 pickle,再拷贝,比平直 `Array('i', [1,2,3])` 慢一倍多。但 `Array` 只维持 int/float/char 这些基础类型,思传个字典?不成。

`Pool.map` 看着省事,但默许是惰性求值。若是你不调 `list` 或遍历遵循,它根柢不干活。我写了个 `pool.map(func, big_list)` 就合计运行了,遵循秩序秒退,啥也没算。等加了 `list(...)`,内存平直爆到 4GB——原本它把统共这个词输入列表提前拷进每个子进度内存里。
文献描画符承袭这事我栽过两次。用 `subprocess.Popen(['ls'])` 开子进度,主进度里有个 `open('log.txt', 'w')`,子进度会悄悄承袭这个 fd。遵循 `ls` 一胁制,log 文献里多了串乱码。处治认识?`Popen(..., close_fds=True)`,约略手动 `fd = os.open(...); os.cloexec(fd)`。
僵尸进度最烦东谈主。`fork` 出来的子进度 `exit(0)` 之后,父进度不 `waitpid`,它就卡在 `Z` 气象。`ps aux | grep Z` 一搜全是。我试过 signal(SIGCHLD, SIG_IGN),系统说忽略后子进度自动由 init 收养,但某些 Python 版块不认这个,仍是得老诚笃实 `waitpid(-1, os.WNOHANG)` 轮询。

用 `concurrent.futures.ProcessPoolExecutor` 是最近才发现的“懒东谈主救星”。`submit` 丢任务,`.result` 防止等,无须管 `close` 和 `join`,坎坷文管制器自动扫尾。但它的 `max_workers` 默许是 `os.cpu_count`,我条记本上是 8,可跑 8 个爬虫反而比 4 个慢——因为每个子进度还要起线程池,终末机器卡成幻灯片。
Python 多进度不是“换个 import 就变快”,它是把 Linux 进度那一套搬进剧本里,还得我方搭桥铺路。fork 是分支,不是复制;IPC 不是传数据,是配合气象;GIL 解了,但内核弯曲、内存拷贝、缓存失效全来了。
我删了三版 demo 代码,重写了五次 main 函数,才跑出一个巩固不卡死的图片缩放剧本。

刻下看到 `multiprocessing` 这四个字,手会抖一下。
家长朋友们可能因为经济的因素,或是认为听力损失太重的一侧耳,助听器已经提供不了什...
在数字化波澜席卷环球的今天,个东谈主信息的传播速率和范围达到了前所未有的高度。一...
宏润竖立集团股份有限公司(以下简称“公司”)于2026年1月23日在宏润大厦会议...
科技日报记者崔爽 近日,中国科学院工程热物理接洽所自主研制的“彩色”金属3D打印...