Python-调度库-需要繁忙循环

Python-调度库-需要繁忙循环,python,loops,while-loop,break,schedule,Python,Loops,While Loop,Break,Schedule,所以我一直在玩弄时间表,终于让它开始工作了。我太激动了,没有意识到又来了一个问题,哈哈。然而,现在的问题是,它并没有结束时,主要是完成,我不能真正找到解决办法。我知道问题就在排时间上。睡眠(1)是因为每当我输入键盘时,就会出现一个错误,说时间。睡眠(1)是“问题”,我真的找不到解决办法来结束它 Im使用github的计划: 为True时: UserInput=input('要运行计划任务,请按y\n直接运行,请按n\n') 如果(UserInput='y'或UserInput='y'): 打印(

所以我一直在玩弄时间表,终于让它开始工作了。我太激动了,没有意识到又来了一个问题,哈哈。然而,现在的问题是,它并没有结束时,主要是完成,我不能真正找到解决办法。我知道问题就在排时间上。睡眠(1)是因为每当我输入键盘时,就会出现一个错误,说时间。睡眠(1)是“问题”,我真的找不到解决办法来结束它

Im使用github的计划:

为True时:
UserInput=input('要运行计划任务,请按y\n直接运行,请按n\n')
如果(UserInput='y'或UserInput='y'):
打印(前置重置+空格)
TimeUser=input('何时启动脚本?格式-HH:MM\n')
schedule.every().day.at(TimeUser.do(main)
擦拭
打印('计划开始于:'+TimeUser+'-等待时间…'))
idle=int(四舍五入(schedule.idle\u seconds())
尽管如此:
schedule.run_pending()
时间。睡眠(1)
idle=int(四舍五入(schedule.idle\u seconds())
如果(怠速<6.0)和(怠速>=0.0):
打印('起始于:'+str(空闲))
elif(UserInput=='n'或UserInput=='n'):
main()
打印(“输入错误-重试”)
我确实收到了一位非常善良的人的推荐: 调度库需要那个繁忙的循环。这里真正的问题是OP如何在不阻塞的情况下运行繁忙的循环,而库文档中的答案是:在另一个线程中运行它。如果他休息,预定的任务将无法完成


我仍然不明白如果不堵住主管道该怎么办。可能有人对此有任何想法吗?

在该示例中,它是该模块的标准调度对象,但扩展了一个额外的方法,您只需调用一次,然后它将在单独的线程中运行。我建议您尝试一下,最快的方法可能是创建自己的对象,将Scheduler子类化,并在子类上实现
run\u continuously()
方法。然后,您可以在调度程序上调用该方法一次,然后在主线程中执行任何您喜欢的操作,而无需定期调用
run\u pending()

按下Ctrl+C时出现的错误不是问题,只是抱怨手动终止睡眠时,
sleep
被中断。如果您想根据某些条件自动退出,可以根据循环中的某些逻辑执行此操作

例如,
而不是terminate:
其中terminate是您已设置的变量,可能是全局变量,可由计划任务更改

这种基于日程安排的模型的许多实用性都是用于在较长时间内重复运行的后台任务。假设您想要执行更多的代码,或者您有一些代码需要运行一次,并且可能在进入
while
循环之前运行,或者您想要重复运行它,并且还可以将其添加到计划中

一些例子 我会注意您是否真的需要为此使用线程-如果您只是希望在完成一次作业后退出程序,那么您需要做的只是:

while schedule.jobs:
    schedule.run_pending()
    time.sleep(1)

并确保您的作业返回
CancelJob
。希望该示例对修补有用,因为它已经在repl.it中进行了测试,所有内容都应该与Python 3配合使用。

在该示例中,它是该模块的标准调度对象,但通过一个额外的方法进行了扩展,您只需调用一次,然后它就可以在单独的线程中运行。我建议您尝试一下,最快的方法可能是创建自己的对象,将Scheduler子类化,并在子类上实现
run\u continuously()
方法。然后,您可以在调度程序上调用该方法一次,然后在主线程中执行任何您喜欢的操作,而无需定期调用
run\u pending()

按下Ctrl+C时出现的错误不是问题,只是抱怨手动终止睡眠时,
sleep
被中断。如果您想根据某些条件自动退出,可以根据循环中的某些逻辑执行此操作

例如,
而不是terminate:
其中terminate是您已设置的变量,可能是全局变量,可由计划任务更改

这种基于日程安排的模型的许多实用性都是用于在较长时间内重复运行的后台任务。假设您想要执行更多的代码,或者您有一些代码需要运行一次,并且可能在进入
while
循环之前运行,或者您想要重复运行它,并且还可以将其添加到计划中

一些例子 我会注意您是否真的需要为此使用线程-如果您只是希望在完成一次作业后退出程序,那么您需要做的只是:

while schedule.jobs:
    schedule.run_pending()
    time.sleep(1)

并确保您的作业返回
CancelJob
。希望该示例对修补有用,因为它已经在repl.it中进行了测试,所有内容都应该与Python 3配合使用。

Oh okey。我现在正在努力理解,哈哈。我确实理解你的意思,但当涉及到用子类等创建自己的对象时,你失去了我。你能不能举个例子:)不过你解释得很好!真的很感激这一部分:)没问题,我真的应该举一些例子。如果到时候没有其他人做过,等我有时间的时候我会做一些:)谢谢!我希望你能用这个拯救我的星期三!作为“待办事项”来完成这件事真是太棒了:)谢谢Rach!哦,好的。我现在正在努力理解,哈哈。我确实理解你的意思,但当涉及到用子类等创建自己的对象时,你失去了我。你能不能举个例子:)不过你解释得很好!真的很感激那一部分:)没问题,我应该
while schedule.jobs:
    schedule.run_pending()
    time.sleep(1)