如何在等待特定延迟后在python中启动一个线程

时间:2016-03-30 16:05:55

标签: python multithreading python-2.7

我有函数检测(),timeralg()

在运行timeralg()函数时,我希望detect()在特定延迟后并行启动。 目前我试过这个

def timeralg(c1,c2,c3,c4):
    t=[4,4,4,6,6,20,24,28,32,36,40]#delay determining array
    for y in range(0,3):
        print 'y is ',y
        if((c1>=c2)and(c1>=c3)):
            print 'timer1 on for'
            x=t[c1]        
            print x
            c1=0

        GPIO.output(5,False)#Red1
        GPIO.output(13,True)#red2
        GPIO.output(12,True)#red3
        GPIO.output(7,True)#green1
        if(y==2):
            t = threading.Thread(detection())
            t.start()
            print 'processing strtd in from 1'

        time.sleep(x-3)
        GPIO.output(7,False)
        GPIO.output(3,True)#Yellow1
        time.sleep(3)
        GPIO.output(3,False)#Yellow1
        GPIO.output(5,True)#Red1

与此不同,我想要'在我指定的特定延迟后开始。

3 个答案:

答案 0 :(得分:3)

您可以按如下方式包裹detection()

def delayed_detection():
    time.sleep(3)
    detection()

然后用:

开始你的主题
t = threading.Thread(delayed_detection)
t.start()

您并没有延迟线程的产生,但是您仍然在三秒钟后调用detecton()

答案 1 :(得分:1)

不要等到启动线程,让线程等待开始工作。

首先创建一个新线程。

新主题应该执行以下操作:

time.sleep(N)

while True:
  detection()

答案 2 :(得分:0)

使用 sleep() 可以,但效率低下。使用 Timer 会更好,它可以在启动线程之前有效地等待延迟。

timer = threading.Timer(delay, detection)
timer.start().   # will execute detection() after "delay" seconds