Windows中Python的os.fork()等效函数是什么?

4 投票
2 回答
23809 浏览
提问于 2025-04-15 22:10

这段代码在Mac和Linux上运行得很好,但在Windows上就不行。

import mmap
import os

map = mmap.mmap(-1, 13)
map.write("Hello world!")

pid = os.fork()

if pid == 0: # In a child process
    print 'child'
    map.seek(0)
    print map.readline()

    map.close()
else:
    print 'parent'
  • 在Windows上,os.fork()的等效函数是什么?

2 个回答

6

这里的回答可能没有直接解决问题。问题出在 fork() 上。从例子来看,你似乎想在两个 Python 脚本之间共享数据。让我来解释一下我的看法。

从 Python 3.8 开始,Windows 平台上并没有真正的 Unix fork() 实现。为了让上面的例子正常工作,子进程必须继承所有的环境变量和打开的文件描述符。

我知道 Windows 现在支持 Windows Linux 子系统,但我上次检查时发现它仍然没有完全实现 fork。Cygwin 确实可以做到,但速度有点慢。

到现在为止,我还不知道如何在 Windows 平台上通过 mmap 在两个 Python 脚本之间传递信息。可以使用:

  1. multiprocessing.Queue
  2. multiprocessing.Pipe
  3. multiprocessing.Manager
  4. multiprocessing 的共享内存(ValueArray)来代替。

我相信你可以让每个 Python 脚本读取要映射的文件内容到一个字符的 Array 中。然后使用你自己的结构将共享内存映射成一个结构化的数据,就像你处理要映射的文件一样。

5

根据你的具体需求,以及你是否可以使用Python 2.6,你可能可以使用multiprocessing这个模块。

撰写回答