C статические переменные в многопроцессорном Python

Здесь у меня есть функция, написанная на C++, вызывающая foo и делающая ее вызываемой (foo_wrapper) из python с помощью обертки python, написанной на C (wrapper.c).

В wrapper.c у меня есть статическая глобальная переменная "x", которая используется и обновляется foo.

Теперь все работает нормально, когда я вызываю foo из python в рамках одного процесса.

Однако, хотя я использую многопроцессорный модуль в Python, даже foo вызывается из основного процесса, это значение "x" НЕ, как должно быть!! Процедура вызова выглядит так:

P=Process(target=myf, args=(a,))
P.start()
foo_wrapper()
P.join()

мой вопрос: когда вызывается fork(), т.е. запускается несколько процессов, как python обрабатывает стек или кучу родительского / дочернего процесса? Как я могу сделать значение "х" прав на основной процесс (или родительский процесс)?

1 ответ

Глобальные переменные C++ являются глобальными только для одного процесса. Если вы используете multiprocessing модуль, то по определению у вас будет несколько процессов, каждый со своим собственным представлением глобальной переменной. Python не делает ничего особенного, чтобы повлиять на это поведение.

Предполагая, что у вас есть контроль над кодом C++, я бы предложил реорганизовать его, чтобы сделать это глобальное состояние видимым для Python в форме, которую Python может сериализовать и десериализовать. Затем вы можете передать состояние между процессами, где это необходимо (например, используя один из классов очереди из multiprocessing).

Другие вопросы по тегам