簡體   English   中英

Python:在無限循環內導入變量

[英]Python: Importing a variable inside of a infinite loop

我有兩個模塊,一個主機和一個掃描儀。 兩者都無限循環以與串行端口通信。 我想將變量“ bestchannel”從掃描儀導入主機,但是通過導入它,掃描儀內部的while循環將首先運行並永遠循環。 我希望每個模塊單獨運行,但能夠實時發送彼此的數據。 這可能嗎?

(在掃描夯之外)

樣例代碼:

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。

示例代碼在鏈接中或答案中,抱歉,我不得不使用其他瀏覽器。

再說一次,如果您還沒有探索使用線程來實現代碼,那么我建議您讓兩個循環同時運行。 所以像這樣:

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

至少這將使您開始同時運行兩個進程。 您仍然需要弄清楚線程管理的方面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM