我正在尝试实现一个线程计时器来控制串行进程的超时。
def tst_setMaxTimeFlag():
lock.acquire()
maxTimeFlag = 1
lock.release()
print "timeout!"
return
def tst_setMaxTimeTimer(maxResponseTime):
global responseTimer
lock.acquire()
maxTimeFlag = 0
lock.release()
responseTimer = threading.Timer(2,tst_setMaxTimeFlag)
print "timer set!"
responseTimer.start
print "timer start!"
return
我想输出为:
但是,永远不会调用tst_setMaxTimeFlag()并超时!从未打印过。
如果我将responseTimer = threading.Timer(2,tst_setMaxTimeFlag)
改为responseTimer = threading.Timer(2,tst_setMaxTimeFlag())
,则无论时间参数如何,都会立即调用超时函数。
maxTimeFlag在main中设置为全局并初始化为0.
有什么想法吗?
答案 0 :(得分:3)
您丢失了代码段中的所有缩进内容,因此很难确定您的操作是什么。
最明显的问题是responseTimer.start
。这只是检索start
对象的responseTimer
方法。您需要调用该方法来启动计时器;即,做responseTimer.start()
。
然后它将产生你期望的输出,在最后的“超时”之前延迟大约2秒!打印出来。