2017-09-30 1 views
-1

우리는 일부 기능은이 대답에서 찾을 것 runInParallel에 의해 호출되는함으로써 병렬 처리를 사용했다 :파이썬에서 다중 프로세스를 수행 할 때 각 프로세스에서 전역 변수가 복제됩니까?

이러한 모든 기능 https://stackoverflow.com/a/7207336/720484 그들이 읽어야 하나의 전역 변수에 액세스 할 수 있도록되어있다.
이 전역 변수는 실제로 클래스의 인스턴스입니다. 이 인스턴스는 멤버 변수/속성과 그것에 읽고 쓰는 모든 프로세스를 포함합니다.

그러나 이런 일은 일어나지 않습니다. 객체 (클래스 인스턴스)는 복제 된 것으로 보이며 속성은 각 프로세스에서 독립적입니다. 따라서 한 프로세스가 값을 변경하면 다른 프로세스의 변수에 표시되지 않습니다.

이것은 예상되는 동작입니까?

어떻게 극복합니까?

는 부모 프로세스에서 분기의 순간에 해당 인스턴스를 상속합니다

+0

설명이없는 downvoting은 왕따와 같습니다. –

답변

3

어린이 프로세스 주셔서 감사합니다. 자식 및 부모의 인스턴스에 대한 모든 변경 내용은 분기 후에 볼 수 없습니다.

이것은 Linux에서 프로세스가 작동하는 방식입니다. 모든 프로세스는 의도적으로 공유하지 않는 한 다른 프로세스로부터 보호되는 자체 메모리를 가지고 있습니다. 파이썬에만 국한된 것은 아닙니다.

당신이 찾고있는 것은 일반적으로 IPC (Inter-Process Communication)라고합니다. 프로세스가 서로 통신하는 방법은 여러 가지가 있습니다. 파이프 또는 공유 메모리를 사용할 수도 있습니다.

파이썬에서는 다음을 읽어보십시오. https://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes

관련 문제