父和子生成似乎不共享映射的内存。 Windows版

时间:2017-01-12 13:26:21

标签: python process mmap

我有一个奇怪的问题。

如果我打开两个cmd,只需通过alt-tabbing从命令行运行每个脚本,下面的代码就可以工作。

# share1.py
import numpy
ram = numpy.memmap("bla",shape=4096,dtype=numpy.uint8,mode="w+")

for y in xrange(0,4096):
    for x in xrange(0,4096):
        ram[x]=65+y

print ram

-

# share2.py
import numpy
ram = numpy.memmap("bla",shape=4096,dtype=numpy.uint8,mode="readwrite")

for y in xrange(0,4096):
    for x in xrange(0,4096):
        m=ram[x]
        print m,

print ram

这个有效! share2会不断打印share1所做的更改。

但是当我直接从python中生成相同的代码而不是cmd时,突然间这不再起作用了,我不明白为什么。

我使用psutil生成一个空的python进程,并通过stdin提供代码。我忽略了stdout,因此spawn中的任何print最终都会在我用来运行脚本的主cmd上输出。

share1输出它设置的正确数字,而share2只输出0,好像它根本没有看到映射。请注意,使用常规mmap(非numpy`s)也会发生这种情况。

我做错了什么?

(编辑:意外地将share2放在最后一个段落的开头,而不是share1。)

0 个答案:

没有答案