몇 시간 동안 그 문제에 대한 해답을 찾고 있었지만 해결할 수 없었으므로 여기에이 질문을 게시해야합니다. 저는 그것이 사소한 것이라고 확신합니다.Python : 프로세스 간 메시지 공유
내가 사용하는 프로젝트에는 많은 클래스와 스레드가 있으며 여기에 작은 클래스를 추가하고 있습니다. 이러한 클래스는 프로젝트의 엔진을 사용하여 다른 스레드에서 실행되지만 서로간에 동기화해야합니다. 즉 클래스 A는 클래스 B에 메시지를 보낼 수 있어야합니다. 다른 모듈에도 있습니다.
EDIT2 :이 질문에 대한 새로운 설명이 있습니다. 하단을보십시오.
저는 파이썬에서 매우 초보자입니다. 큐 객체 (Queue.Queue())를 공유하고이를 끝없는 루프에서 검사하여이 문제를 해결하기 위해이 객체와 메소드를 사용하여 매우 간단한 모듈을 만들었습니다. :
메신저 모듈 :
import Queue
MessageQueue = Queue.Queue()
def GetMessage():
return MessageQueue.get()
def PutMessage(message):
MessageQueue.put(message)
return
두 개의 다른 클래스 (수입 메신저)에서 사용하지만 전역 변수가 아니다 이후, 나는 'MessageQueue가'객체가 다른 클래스의 다른 인스턴스가 있다고 가정합니다. 이러한 클래스는 다른 대기열에서 작동하는 것 같습니다.
두 개체를 같은 개체로 동기화하는 방법 (이 큐를 전역으로 만 보내는 것보다 더 좋은 방법 일 수 있습니까?)
클래스 A : :
from utils import messenger as m
class Foo():
[...]
def foo():
[...]
m.put(message)
클래스 B :
from utils import messenger
class Bar():
[...]
def bar():
[...]
while True:
print(str(m.get()))
EDIT2 : -
EDIT1 여기 클래스입니다 지금 내 문제가 좀 더 잘 이해하기 때문에, 여기에 업데이트 :
두 클래스 모두 다른 프로세스에서 별개의 프로그램으로 실행됩니다 (왜 전역 변수를 공유하지 않는지 설명 할 수 있습니다 :)).
그래서 문제가 남아 있습니다 : 두 개의 서로 다른 프로그램간에 어떻게 동기화합니까? 내가 생각하는 유일한 해결책은 디스크에 파일을 만들고 프로세스간에 읽는 것입니다.하지만 매우 신뢰할 수없는 것 같습니다 (잠금 장치 등). 느립니다.
나에게 다른 접근 방식을 제안 할 수 있습니까?
실제 수업이나 모듈을 만들었습니까? – Blender
여기에 어떤 수업도 표시하지 않았습니다. 방금 전역 변수와 전역 함수가 있습니다. 그래서 이것은 여러분이 묻는 코드가 아니거나 대부분의 사람들이하는 "전역 변수"에 의해 같은 것을 의미하지는 않습니다. – abarnert
@Blender : 예, 모듈 만 만들었습니다 - 질문을 수정했습니다 (세 번째 클래스가 아니며 단지 모듈 일뿐입니다). – msu