2010-12-29 16 views
0

私は2つのモジュール、ホストとスキャナを持っています。どちらも無期限にループしてシリアルポートと通信します。変数 "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

私の最初の質問は、あなたの2つのモジュールを実行するスレッドを使用しているでしょうか?既存のコードがある場合は、それを確認したいと思います。 – spade78

+0

何をしているのかを明確にするために、サンプルコードを追加してください。 –

+0

あなたが投稿したコードをハイライトしてから、 '{}'の角括弧でボタンを押してコードとして読むことができます。 – bgporter

答えて

1

スレッドを使用してコードを実装する方法を検討していない場合は、同時に2つのループを実行することをお勧めします。したがって、次のようなものがあります。

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() 

これで少なくとも2つのプロセスを同時に実行することができます。あなたはまだこれのスレッド管理の側面を把握する必要があります。