Windows中Python的os.fork()等效函数是什么?
这段代码在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 脚本之间传递信息。可以使用:
multiprocessing.Queue
或multiprocessing.Pipe
或multiprocessing.Manager
或multiprocessing
的共享内存(Value
和Array
)来代替。
我相信你可以让每个 Python 脚本读取要映射的文件内容到一个字符的 Array
中。然后使用你自己的结构将共享内存映射成一个结构化的数据,就像你处理要映射的文件一样。
5
根据你的具体需求,以及你是否可以使用Python 2.6,你可能可以使用multiprocessing这个模块。