Python - 永无止境的time.sleep(1) - 可以结束吗?

时间:2017-09-27 13:05:41

标签: python multithreading scheduled-tasks deadlock sleep

所以我一直在玩计划,最后让它上班。我太兴奋了,不知道还有另一个问题哈哈。然而现在的问题是,只要主要完成并且我无法真正找到解决方案,它就不会结束。我知道问题出在 Time.sleep(1)行上,因为每当我使用keyboardInterrput时出现错误,说Time.sleep(1)是“Issue”和我真的找不到结束它的方法。

我正在使用github中的日程安排:Github schedule

while True:
    UserInput = input('To run Schedule task - Press y\nTo run directly - Press n\n')

    if(UserInput == 'y' or UserInput == 'Y'):
        print(Fore.RESET + space)
        TimeUser = input('What time to start script? Format - HH:MM\n')

        schedule.every().day.at(TimeUser).do(main)
        wipe()
        print('Schedule starts at: ''' + TimeUser + ' - Waiting for time...')
        idle = int(round(schedule.idle_seconds()))



        while True:
            schedule.run_pending()
            time.sleep(1)
            idle = int(round(schedule.idle_seconds()))
            if(idle < 6.0) and (idle >= 0.0):
                print('Starting in: ' + str(idle))

    elif(UserInput == 'n' or UserInput == 'N'):
        main()


    print("Wrong input - Try again")

2 个答案:

答案 0 :(得分:1)

您可以使用for关键字。 for语句可以定义迭代和暂停条件。或者使用range()函数迭代数字序列。

习惯于传统的if-then-else语句,break语句会让你摆脱你的while循环。它需要与您最内层的forwhile循环相关联。您的else子句需要属于您的for循环,而不属于if语句的一部分。 continue语句将向前移动循环。

这里有一些例子:https://docs.python.org/3/tutorial/controlflow.html

答案 1 :(得分:0)

您的代码封装在while循环中,true作为参数。要么你错误地做了这个,要么结构很糟糕。这就是问题所在。

如果您不想删除while循环,请至少在某处添加break

如果您需要帮助构建代码,请转到Code Review.