Python:在无限循环中导入变量

2024-10-01 00:31:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模块,一个主机和一个扫描仪。两者都无限期地循环以与串行端口通信。我想将变量“bestchannel”从scanner导入到主机,但是通过导入它,scanner内部的while循环首先运行并永远循环。我希望每个模块单独运行,但能够实时发送彼此的数据。这可能吗?在

(扫描ram外部)

样本代码:

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对主机是可访问的。在

示例代码是在链接中或向下的答案,对不起我不得不使用不同的浏览器。在


Tags: andinforlenifrangeserchan
1条回答
网友
1楼 · 发布于 2024-10-01 00:31:42

因此,如果您还没有探索过使用线程实现代码,那么我建议您同时运行两个循环。所以像这样:

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

至少这会让你开始同时运行两个进程。您仍然需要弄清楚这个问题的线程管理方面。在

相关问题 更多 >