Я создаю программу, которая работает на Windows P C, и у меня возникли некоторые проблемы с многопроцессорным модулем.
Допустим, мы запустили следующий код:
import multiprocessing as mp
def f():
print('f running')
def main():
p = mp.Process(target=f)
p.start()
print('test print')
if __name__ == '__main__':
main()
Если я запускаю его на MacOS, я получаю ожидаемый результат:
test print
f running
Если я его полощу на Windows, я получаю:
test print
test print
f running
Я понимаю, что это Это происходит потому, что python импортирует весь файл для каждого нового процесса, но есть ли способ заставить его вести себя как в MacOS?
Спасибо!
РЕДАКТИРОВАТЬ:
В моей программе я определяю некоторые глобальные переменные в верхней части файла, которые никогда не должны изменяться, но когда процесс запускается и он импортирует файл, эти глобальные переменные обновляются и получают новые значения, что является проблемой.
Создание этих глобальных переменных внутри if name == ... работает на MacOS, но не на Windows. А на MacOS мне бы не пришлось это делать в любом случае.
import multiprocessing as mp
def f():
print(v)
print('f running')
def main():
p = mp.Process(target=f)
p.start()
print('test print')
if __name__ == '__main__':
v = 'a variable'
main()
Вывод на MacOS:
test print
a variable
f running
Вывод на Windows:
test print
test print
Process Process-1:
Traceback (most recent call last):
File "C:\Users\ixg21219\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\process.py", line 313, in _bootstrap
self.run()
File "C:\Users\ixg21219\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\ixg21219\Desktop\MP_test\test.py", line 4, in f
print(v)
NameError: name 'v' is not defined