【发布时间】:2017-09-28 13:20:18
【问题描述】:
我正在尝试将共享密钥传递给子进程。在 Linux 环境中,这是可行的。在 Windows 环境中,孩子不会收到共享密钥。下面的三个文件是我正在尝试做的一个简单示例:
main.py
import multiprocessing
import module1
import module2
if __name__ == "__main__":
module1.init()
process = multiprocessing.Process(target=module2.start)
process.start()
process.join()
module1.py
import ctypes
import multiprocessing
x = None
def init():
global x
x = multiprocessing.Value(ctypes.c_wchar_p, "asdf")
module2.py
import module1
def start():
print(module1.x.value)
在 Ubuntu 14.04 环境中,在 Python 3.5 上,我收到以下输出:
$ python3 main.py
asdf
在 CentOS 7 环境中,我收到以下输出:
$ python3 main.py
asdf
在 Windows 10 上使用适用于 Linux 的 Windows 子系统(在 Creator 更新之前和之后,因此 Ubuntu 14.04 和 16.04)我得到以下输出:
$ python3 main.py
asdf
但是,在 Windows 7 和 Windows 10 环境中,使用 3.5 或 3.6,我得到一个 AttributeError 而不是上面的输出:
Process Process-1:
Traceback (most recent call last):
File "C:\Python\Python35\lib\multiprocessing\process.py", line 249, in _bootstrap
self.run()
File "C:\Python\Python35\lib\multiprocessing\process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "H:\Development\replicate-bug\module2.py", line 5, in start
print(module1.x.value)
AttributeError: 'NoneType' object has no attribute 'value'
我正在使用shared ctype。这个值应该被子进程继承。
为什么我在 Windows 环境中收到此AttributeError,但在 Linux 环境中却没有?
【问题讨论】:
标签: python linux windows python-multiprocessing attributeerror