此代码在 Mac/Linux 中运行良好,但在 Windows 中运行不佳。
导入映射
导入操作系统
地图 = mmap.mmap(-1, 13)
地图.write(“你好世界!”)
pid = os.fork()
if pid == 0: # 在子进程中
打印“孩子”
地图.seek(0)
打印map.readline()
地图.close()
别的:
打印“父母”
这里的答案可能并不能回答问题。问题是由于fork(). 从示例来看,您似乎想要在两个 Python 脚本之间共享数据。让我解释一下我的观点。
fork()从Python 3.8开始, Windows平台上还没有真正的Unix实现。为了使上面的示例正常工作,子进程必须继承所有环境和打开的文件描述符。
我知道Windows现在支持Windows Linux子系统,但我上次检查它仍然没有完全实现fork。Cygwin 实际上可以,但速度有点慢。
到目前为止,我不知道如何在 Windows 平台中使用 mmap 在两个 Python 脚本之间传递信息。使用
multiprocessing.Queue或者multiprocessing.Pipe或者multiprocessing.Manager或者 multiprocessing的共享内存 (Value和Array) 来代替。我相信你可以让每个Python脚本将要映射的文件的内容读入Array字符中。然后使用您自己的结构将共享内存映射为结构化数据,就像处理要映射的文件一样。