2010-12-29 6 views
0

호스트와 스캐너라는 두 개의 모듈이 있습니다. 둘 다 무한정 반복되어 직렬 포트와 통신합니다. 나는 "bestchannel"변수를 스캐너에서 호스트로 가져오고 싶지만 가져 오기를하면 스캐너 내부의 while 루프가 먼저 실행되고 루프가 영원히 돌아갑니다. 각 모듈을 개별적으로 실행하고 실시간으로 서로 다른 데이터를 보낼 수 있기를 바랍니다. 이것이 가능한가?Python : 무한 루프 내에서 변수 가져 오기

(스캔 램의 외부)

샘플 코드 :

Host Loop---------------------------------------------- 
while True: 
    ser.write(assemble("20","FF","FF","64","B")) 
    sData = ser.read(100) 
    if len(sData)>0: 
     for i in range(0, len(sData)-17): 
      if sData[i]==chr(1) and sData[i+1]==chr(20) and sData[i+2]==chr(int("A1", 16)): 
       height = (ord(sData[i+16])*256+ord(sData[i+17]))/100 
       print "Sensor ", ord(sData[i+12]), " is returning height ", 
       height, "mm. The minnoisechan:",minchannel 

Scanner Loop---------------------------------------------- 
while True: 
    ser.write(scan("FF", "FF", str(scanlength))) #Channel Mask, Length 
    time.sleep(scanlength+2.0) 
    sData = ser.read(100) 
    if len(sData)>0: 
     for i in range(0, len(sData)-16): 
      if sData[i]==chr(1) and sData[i+1]==chr(23) and sData[i+2]==chr(int("C5", 16)): 
       for j in range(0, 16): 
        chan[j] = sData[i+5+j] 
        print "channel: ",j+11,"=",ord(chan[j]) 
        if ord(chan[j])<minvalue: 
         minvalue=ord(chan[j]) 
         minchannel=j+11 
       count+=1 
       print "count",count,"minvalue:",minvalue,"minchannel:",minchannel 
       minvalue=999 

나는 호스트에 액세스 할 수 있도록 스캐너에서 minchannel를 원한다.

샘플 코드가 답변에 링크 또는 아래에 있습니다. 죄송합니다. 다른 브라우저를 사용해야했습니다.

+0

어떤 코드도없이, 두 번째 모듈을 실행하기 위해 스레드를 사용하고 있습니까? 기존 코드가 있다면 그것을보고 싶습니다. – spade78

+0

당신이하고있는 일을 명확히하기 위해 몇 가지 샘플 코드를 추가하십시오. –

+0

안녕하세요 - 게시 한 코드를 선택한 다음 '{}'괄호로 버튼을 눌러 코드로 읽을 수 있습니다. – bgporter

답변

1

그럼 다시 스레드를 사용하여 코드를 구현하지 않은 경우 두 개의 루프를 동시에 실행하는 것이 좋습니다. 그래서 이런 식으로 :

import threading 
import Queue 

def host(dataQueue): 
    """ 
    Host code goes here. 
    """ 
    # Check dataQueue for incoming data among other things... 
    .... 

def scanner(dataQueue): 
    """ 
    Scanner code goes. 
    """ 
    # Put data into dataQueue among other things... 
    .... 

if __name__ == 'main': 
    dataQ = Queue.queue() 
    hostThread = threading.Thread(target=host, name="Host", arg=(dataQ,)) 
    scannerThread = threading.Thread(target=scanner, name="Scanner", arg=(dataQ,)) 
    hostThread.start() 
    scannerThread.start() 

적어도이 두 가지 프로세스를 함께 시작하게됩니다. 당신은 여전히 ​​스레드 관리 측면을 이해해야합니다.