Python在Windows上的os.fork()等价方法是什么?

4
这段代码在Mac/Linux上运行良好,但在Windows上无法运行。
import mmap
import os
map = mmap.mmap(-1, 13) map.write("Hello world!") pid = os.fork()
if pid == 0: # 在子进程中 print 'child' map.seek(0) print map.readline()
map.close() else: print 'parent'
  • 在Windows上,os.fork()的等效函数是什么?
答:在Windows上,没有与os.fork()完全等效的函数。可以使用multiprocessing库来模拟类似的功能。
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模块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接