我正在编写一个python脚本来控制设置的各种硬件部分。 我有一个状态,我想保留,而脚本的其他部分做他们的事情。 我认为这个while循环正在阻止脚本的其他部分运行。 我是否需要引入线程,以便该循环可以继续运行,直到我告诉它停止?
不确定我是否正在寻找解决问题的正确方法。
编辑: 我粘贴了一些代码,整个事情都很大。
这会侦听USB MIDI设备以查找特定类型的消息,并根据inst中列出的输入值执行操作
while True:
b = f.read(1)
s='rawdataB:'+ hex(ord(b))
print s
if b == '\x90':
note=True
elif note:
if b in inst:
print "IsNote:" + str( int(hex(ord(b)), 16))
noteaction(inst.get(b))
note=False
if b== '\xB0':
controller=True
elif controller:
#grab the controller with byte 1, value with byte 2
bcount = bcount +1
cn=hex(ord(b)) #hex value of byte
if bcount == 1:
cntrl=cn
if cntrl== '0xd':
fspeedC= 1
print 'fspeed cnum'
elif bcount == 2:
cval=cn
if fspeedC == 1:
fspeed= int(cval,16)
print 'fspeed=' + str(fspeed)
MotorControl('fwd',fspeed,0)
print 'moving forward'
print "cn:" + str(cntrl) + ", val:" + str(cval)
print "bcount: " + str(bcount)
bcount=0
cvalue=True
elif cvalue:
val=int(hex(ord(b)), 16)
#print "2val:" + str(val)
if val != -1 :
print "do something"
cvalue=False
print "cn:" + str(cntrl) + ", val:" + str(val)
controller=False
# this will be a function i guess but also can be in an infinite loop mode when I want it to be
# however while this is running I still want the above code to monitor the incoming MIDI bytes
x=0
while True:
GPIO.wait_for_edge(11, GPIO.FALLING)
#prevent bounce
time.sleep(0.2)
x=x+1
print x
if x % 2 == 0:
ControlAPairOfPins("17","1","24","0")
print "Forward"
else:
ControlAPairOfPins("17","0","24","1")
print "backward"
答案 0 :(得分:0)
如果您希望在执行其他操作时保持循环运行,则可以使用Python threading
模块。这方面的例子是
import time
import threading
def loop(n=10):
while n>0:
print n
n -= 1
time.sleep(1)
t = threading.Thread(target=loop)
print 'hello world'
t.start()
你好世界
10
9
8
7
6
五
4
3
2
1