2011-07-28 4 views
0

파이썬 3.x에서 서버로 작동하는 클래스를 만들었습니다. 하나의 방법은 소켓 모듈을 사용하여 UDP/IP를 통해 데이터를 송수신하는 방법입니다 (데이터는 각각 self.cmdself.msr에 저장 됨). self.msr, self.cmd 변수를 파이썬 인터프리터 온라인에서 수정할 수 있도록하고 싶습니다. 예를 들어 : 파이썬 인터프리터의 백그라운드에서 메소드 실행하기

>>> from myserver import MyServer 
>>> s = MyServer() 
>>> s.bakcground_recv_send() # runs in the background, constantly calling s.recv_msr(), s.send_cmd() 
>>> process_data(s.msr) # I use the latest received data 
>>> s.cmd[0] = 5 # this will be sent automatically 
>>> s.msr # I can see what the newest data is 

지금까지 s.bakcground_recv_send()가 존재하지 않습니다. 나는에)를 수동으로 s.recv_msr()를 내가 s.msr의 값 업데이트를 참조 할 때마다 ( s.recv_msr이 블로킹 소켓을 사용)를 호출 한 다음 s.send_cmd을 (호출 할 필요가 s.cmd을 보내주십시오.

이 특정 경우에 어떤 모듈이 더 적합합니까? 다중 프로세스 또는 스레딩? 이 문제를 어떻게 해결할 수 있습니까? 나는 프로세스 나 쓰레드에 대한 경험이 없다. (많은 것을 읽었지만 여전히 어떤 방법으로 가는지 확신 할 수 없다.)

답변

0

이 경우 스레딩이 가장 적합합니다. 즉, 다중 처리는 다른 프로 세서에서 프로세스를 실행하기위한 것이고 스레딩은 백그라운드에서 수행하는 것입니다.

+0

감사합니다. 시험해 보겠습니다. 나중에 구현에 대한 다른 질문이 올 수도 있습니다. – jpmz

+0

스레드와 공유되는 클래스 속성에 직접 액세스하려면 ** 안전 **합니까? 스레드가 데이터를 수신/전송하는 동안 콘솔에서 s.cmd [0] = 5를 입력하면 문제없이 작동하는 것 같습니다. 대신 _queues_를 사용해야합니까? – jpmz

+0

예, 속성 액세스는 스레드로부터 안전합니다. http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm –

관련 문제