【发布时间】:2018-07-13 17:37:27
【问题描述】:
我想在 While true 循环中超时后启动一个函数,但代码不执行任何操作并跳出循环,我不知道为什么:/
这是我的代码
import requests
from threading import Timer
def timeout(flag):
print("New Request")
statuscode = requests.get("http://adslkfhdsjf.de").status_code
if statuscode == 200 and flag == 0:
print("Service available")
#Testzwecke
print("Flag: ", flag)
flag = 0
#Poste result to Backend
elif statuscode == 200 and flag == 1:
print("Service is available now")
print("Flag: ", flag)
flag = 0
#Email an User
#Post Request
elif statuscode != 200 and flag == 0:
print("Service is not available")
#Testzwecke
print("Flag: ", flag)
flag = 1
#Email to User
#Post Request
else:
print("Service is not available")
#Testzwecke
print("Flag: ", flag)
#Post Request
Timer(10, timeout, flag)
timeout(0)
我希望例如每 10 秒执行一次超时。所以每隔 10 秒就会执行一个来自函数 timeout() 的条件。
但到目前为止它不起作用,控制台输出什么都没有:/
【问题讨论】:
-
您在此处发布的代码仅定义了一个
main函数,并且从不调用它。你的真实代码也是这样吗? -
把变量
flag的声明和timeout的定义放在main外面。 -
不管怎样,如果你解决了这个问题(通过在脚本末尾添加一个缩进的
main()),你将遇到一个全新的问题:你正在创建并调用一个新的timeout尽可能快地反复运行。每个人都会创建一个Timer,它会创建一个新线程。所以你很快就会创建比你的操作系统可以处理的更多的线程。如果你很幸运,你会得到一个错误。如果你不走运,你的系统会慢慢爬起来,即使在你设法杀死脚本后也需要几分钟才能恢复。 -
@AfloroaieRobert 虽然这些都是合理的做法,但如何解决代码中的任何问题?每 10 秒构建一个新的函数对象的成本很小,但谁在乎呢?
main中的flag将被timeout中的flag隐藏,但对于全局flag也是如此。 -
@abarnert,我并没有试图解决问题,我试图建议对代码进行一些改进,因此是评论而不是答案。
标签: python