Python:在无限循环中导入变量
我有两个模块,一个是主机(host),另一个是扫描器(scanner)。这两个模块都在不停地循环,以便通过串口进行通信。我想把扫描器里的变量“bestchannel”导入到主机中,但一导入它,扫描器里的循环就会先运行,并且一直循环下去。我希望每个模块能够独立运行,但又能实时互相发送数据。这样做可以吗?
(不涉及扫描内存)
示例代码:
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可以被主机访问。
示例代码在链接中或者答案下方,抱歉我不得不用不同的浏览器。
1 个回答
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()
至少这样可以让你开始同时运行这两个过程。不过,你还需要了解一下线程管理的相关内容。