[英]Stop/Kill Continuous Thread
我在繪制輸入數據時試圖連續運行同時控制步進電機的功能。 我可以運行該功能,但是當我嘗試通過鍵盤中斷將其停止時,線程無法識別它。
這是代碼:
def forward():
global delay
while True:
try:
cor = (-2.3*readadc(cor_adc)) + 1841
target = readadc(target_adc)
deltaP = target - cor
deltaP_list.append(deltaP)
if math.fabs((deltaP_list[-1] - deltaP_list[-2])) >= 10:
delay=(-.125628140704*math.fabs(deltaP)) + 30.1256281407
if delay < 5:
delay=5
print "delay", delay
print "diff", math.fabs((deltaP_list[-1] - deltaP_list[-2]))
print "Delta P", math.fabs(deltaP)
for i in range(0, int(50)):
setStep(1, 0, 0, 0)
time.sleep(int(delay) / 1000.0)
setStep(1, 1, 0, 0)
time.sleep(int(delay) / 1000.0)
setStep(0, 1, 0, 0)
time.sleep(int(delay) / 1000.0)
setStep(0, 1, 1, 0)
time.sleep(int(delay) / 1000.0)
setStep(0, 0, 1, 0)
time.sleep(int(delay) / 1000.0)
setStep(0, 0, 1, 1)
time.sleep(int(delay) / 1000.0)
setStep(0, 0, 0, 1)
time.sleep(int(delay) / 1000.0)
setStep(1, 0, 0, 1)
time.sleep(int(delay) / 1000.0)
except KeyboardInterrupt:
print('end')
break
Thread(target=forward).start()
xAchse=pylab.arange(0,50,1)
yAchse=pylab.array([0]*50)
fig = pylab.figure(1)
ax = fig.add_subplot(111)
ax.grid(True)
ax.set_title("Linear Algorithm")
ax.set_xlabel("Time")
ax.set_ylabel("mmHg")
ax.axis([0,50,0,300])
line1=ax.plot(xAchse,yAchse,'-')
line2=ax.plot(xAchse,yAchse,'-')
manager = pylab.get_current_fig_manager()
def build_plot(arg):
cor = (-2.3*readadc(cor_adc)) + 1841
target = readadc(target_adc)
cor_list.append(cor)
target_list.append(target)
def RealtimePloter(arg):
CurrentXAxis=pylab.arange(0,50,1)
line1[0].set_data(CurrentXAxis,pylab.array(cor_list[-50:]))
line2[0].set_data(CurrentXAxis,pylab.array(target_list[-50:]))
ax.axis([CurrentXAxis.min(),CurrentXAxis.max(),0, 300])
manager.canvas.draw()
#manager.show()
timer = fig.canvas.new_timer(interval=1)
timer.add_callback(RealtimePloter, ())
timer2 = fig.canvas.new_timer(interval=1)
timer2.add_callback(build_plot, ())
timer.start()
timer2.start()
pylab.show()
我相信您的線程實例不監聽interrupt
的原因是因為它非常忙於運行forward()
方法!
嘗試查看是否追加:
import time #somewhere in your code
time.sleep(0)
在方法結束時,將使線程進行監聽! “休眠”零秒等於檢查信號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.