在main中调用一次时运行两次的Python线程

在main中调用一次时运行两次的Python线程,python,multithreading,flask,bottle,Python,Multithreading,Flask,Bottle,这条主线位于我们的服务器中,app.run将在其中启动服务器并能够处理请求。我们正在制作的线程是一个计时器,它每5秒检查一个if语句。但是,t.start()将创建两个线程,而不是一个线程。我们已经尝试将t.start()更改为t.run(),但是当我们这样做时,我们永远无法访问app.run,我们需要它来运行服务器 if __name__ == '__main__': t = threading.Thread(target = authtarget) t.daemon = T

这条主线位于我们的服务器中,app.run将在其中启动服务器并能够处理请求。我们正在制作的线程是一个计时器,它每5秒检查一个if语句。但是,t.start()将创建两个线程,而不是一个线程。我们已经尝试将t.start()更改为t.run(),但是当我们这样做时,我们永远无法访问app.run,我们需要它来运行服务器

if __name__ == '__main__':

    t = threading.Thread(target = authtarget)
    t.daemon = True
    t.start()
    print 'running thread'
    app.run(debug=True)
timer()是我们需要每5秒调用一次的函数。
然而,根据我们目前的代码,计时器会被调用两次,而不是每5秒调用一次

谢谢各位,我刚刚将app.run(debug=True)更改为app.run(debug=False),这样它就不会一次运行两次了。在@Jean Françoisfare的评论之后,
app.run()
做了什么?这似乎是第二个执行线程的明显嫌疑。app.run()只是为程序的主要部分运行一些辅助函数。但它没有任何线程调用。是否将“app”定义为来自外部库(即Flask)的对象?例如,在上,带有调试标志的app.run可能会导致应用加载两次。如果是这种情况,一个可能的解决方案是在线程启动时设置一个环境变量(使用os.environ),如果已经设置了,则退出,这样线程就不会运行两次。我在使用瓶子时遇到了类似的问题。通过更改
reloader=False
解决了此问题。
def authtarget():
    sp  = Spotify()
    db = Database()
    resultList = []
    while True:
        time.sleep(5)
        sp.timer(204)