我用python的while Ture死循环来持续监控收盘价,如果有变动(大于0),我希望只打印一次,并且不退出循环,继续监控,如何只执行一次打印并且不破坏循环(下次遇到变动仍只打印一次)?谢谢!
补充:目前sleep(0.5)会打印两次,如果改成sleep(1)是会打印一次,但频率低了跟不上价格的变动,会导致价格出错。
def spj(): # 收盘价
if qgm() == '00': # 时间为00的时候(每分钟一次)
return jg() # 返回价格
def close(): # 收盘价
while True: # 循环执行
if spj() != None: # 如果价格不为空
break # 跳出循环
sleep(0.01) # 循环频率
return float(spj()) # 返回收盘价
while True: # 持续监视
if close() > 0: # 如果收盘价变动
print(close()) # 打印收盘价
sleep(0.5) # 监视频率
你可以使用一个变量来记录上一次收盘价,并在每次循环中检查当前收盘价是否与上一次收盘价相同。如果不同,则打印当前收盘价并更新上一次收盘价变量。
last_close = None
while True:
current_close = close()
if current_close > 0 and current_close != last_close:
print(current_close)
last_close = current_close
sleep(0.5)
注意: 上面的代码还有其他问题, 例如如果价格一直是0的话,会导致死循环。
最好就是多线程,子线程一直监视股价变动,只要变动,就发信号给主线程,子线程不用睡。还有一个为啥变动就要打印呢,设定范围,变动多少才打印吧。再说交易所3秒才发一次价格,你监视那么频繁也没用。