【问题标题】:Stop/Kill Continuous Thread停止/终止连续线程
【发布时间】:2013-08-02 19:14:00
【问题描述】:

我试图在绘制传入数据的同时连续运行一个控制步进电机的函数。我可以运行该功能,但是当我尝试通过键盘中断来停止它时,线程无法识别它。

代码如下:

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

【问题讨论】:

  • 您应该添加一个与您使用的语言相对应的标签。

标签: python multithreading loops kill


【解决方案1】:

没有时间了!

我相信您的线程实例不听interrupt 的原因是因为它非常忙于运行forward() 方法!

试试看是否追加:

import time #somewhere in your code
time.sleep(0)

在你的方法结束时,会让线程听! “休眠”零秒等于检查信号。

Read more about it

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多