서버와의 소켓 통신을 포함하는 Python 응용 프로그램을 만들고 있습니다. 내 전체 응용 프로그램 (다른 여러 모듈)에서 사용할 수있는 모듈을 갖고 싶습니다. 현재 내 모듈은 다음과 같이 : 나는 다른 모듈에서 이것을 사용하면 다음 작업을 수행 할Python 클래스의 단일 인스턴스
class SocketCommunication:
def __init__(self):
self.socketIO = SocketIO(settings.ADDRESS, settings.PORT, Namespace)
def emit(self, message, data):
json_data = json.dumps(data.__dict__)
self.socketIO.emit(message, json_data)
class Namespace(BaseNamespace):
def on_connect(self):
print '[Connected]'
def on_disconnect(self):
print "[Disconnected]"
:
import SocketCommunication
self.sc = SocketCommunication()
문제를 내가이 작업을 수행 할 때마다이 새 연결이 생성되어있는 것 서버에 새로운 클라이언트로 표시되기 때문에 바람직하지 않습니다. 내가 읽을 수있는 것부터, 싱글 톤은 파이썬에서 피해야하며, 따라서 이런 유형의 문제에 대한 모범 사례는 무엇인지 궁금하다.
** 보그 디자인 패턴에 대한 자세한 내용은 여기 ** (http://code.activestate.com/recipes/577870-singleton-we-dont-need-no-stinkin-singleton-the-bo/) 및 [here] (http://code.activestate.com/recipes/66531/)을 참조하십시오. 클래스를 싱글 톤으로 쉽게 변환 할 수 있습니다. 또한 다른 방법이 있습니다. – martineau
클래스 자체를 싱글 톤으로 사용하고 싶습니다. 나는이 접근 방식에 결코 문제가 없었다. – Alfe
'SocketCommunication'이 클래스 중 하나의 이름이기 때문에 다른 모듈에서'import SocketCommunication '이 작동하지 않는다고합니다. 다음 줄이 유효하려면'from my_module import SocketCommunication'과 같은 것이 필요할 것입니다. 즉, 클래스를 정의한 후에 클래스를 효과적으로 'my_module.py' 파일에'SocketCommunication = SocketCommunication()'을 추가하는 싱글 톤으로 만들 수 있습니다. 그렇게하면 클래스 이름이 자체 인스턴스로 재정의되므로 더 이상 인스턴스를 만드는 것이 매우 어려울 것입니다. – martineau