Я пытаюсь передать общий секрет дочерним процессам. В среде 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 для Linux в Windows 10 (как до, так и после обновления 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'
Я использую общий тип ctype. Это значение должно быть унаследовано дочерним процессом.
Почему я получаю этот AttributeError
в среде Windows, но не в среде Linux?