2012-09-07 6 views
0

장치 이벤트의 유효성을 검사하는 Python 프로그램을 작성하고 있습니다.스레드 동기화를위한 설계 도움말

나는 continuosly 장치에서 시리얼 포트에서 일부 데이터를 읽고 있습니다. 장치의 직렬 포트에 무엇인가를 쓸 때 장치는 내가 읽어야하는 직렬 포트에 문자열을 씁니다. 연속적으로 직렬 포트에서 파트를 읽는 것은 별도의 작업자 스레드에 있습니다.이 작업을 한 줄씩 읽고 스레드에 씁니다. 장치는 일부 데이터를 지속적으로 기록하고 이벤트 설명을 serail 포트에 씁니다. 내가 장치에 뭔가를 쓸 때

더 구체적으로, 디바이스에 이벤트를 생성합니다. 이벤트에 대한 설명이 직렬 포트에 다시 기록됩니다. 이 다시 그것을 읽고 이벤트가 발생했는지 여부를 확인해야합니다.

이제 뭔가를 쓰고 해당 이벤트 desc를 읽기 시작하여 그 출력이 이미 사라져서 다음에 다른 출력 행이 표시 될 때까지 스레드에서 줄 단위로 장치 출력을 읽는 중 무슨 일이 발생합니까? 읽히고. 어떻게 동기화합니까?

는이 부분을 설계 좀 도와 줄래? 그냥 비동기 IO에 대한 스레드를 사용하는 경우

+0

당신은 당신이 지금하고있는 일의 작은 코드 조각이 있습니까? 장치에서 계속해서 읽는다면 라인을 "빠뜨릴"방법이 없어야합니다. – jdi

+0

또한이 읽기 및 쓰기 프로세스는 이유 때문에 두 개의 독립적 인 스레드 여야합니까? 단일 스레드에 대한 요청 - 응답 시스템처럼 들립니다. 나중에 비동기가되어서 나중에 독자가 게시 된 이벤트의 유효성을 검사하고 작성자가 계속 움직일 수 있습니까? 클래스 SerialCom : __init __ (자기, 처신) : self.comport = self.readSerialPortThread = ReadSearialPortThread (self.comport) 데프 writeStringToSerialPort() 처신 : self.comport을 다음과 같이 – jdi

+0

코드 조각이다 .write (somedata) –

답변

0

, 당신은 당신이 자신에 더욱 쉽게 만들고 싶어하는 경우도 asyncore 아마도 스레드를 사용하고 select.select를 사용하거나하지 더 좋을 수 있습니다. 다음과 같이

http://docs.python.org/library/asyncore.html

-1

코드 조각은 다음과 같습니다

클래스 SerialCom : 지속적으로 장치 정보 값을 읽고하여 SerialPort에서 ReadSearialPortThread 데이터에서

__init__(self,comport): 

    self.comport = comport 

    self.readSerialPortThread = ReadSearialPortThread(self.comport) 

    def writeStringToSerialPort(someString): 

    self.comport.write(someString) 

    def waitfordata(someString): 

    #I have to continuously read data from serial port till we someString. 

. writeStringToSerialPort()를 사용하여 데이터를 쓸 때 장치는 직렬 포트에 일부 데이터를 출력합니다. 장치의 응답을 확인하기 위해 waitfordata 함수에서이 데이터를 읽어야합니다. 나는 어떤 값을 기록하고 필요한 값이 이미 readSerialPortThread 읽을 및 장치 정보와 같은 다른 값을 읽기까지 계속된다) (waitfordata 호출 할 때

지금 무슨 일이 일어나고 있는지입니다. 그래서 저는 그곳에서 가치를 잃고 있습니다. 나는 그것과 어떻게 조화되는지 알고 싶다.

+0

실제 답변을 위해서는 * Post answer * 버튼을 사용하십시오. 추가 정보를 추가하려면 원래 질문을 수정해야합니다. – jdi

관련 문제