我正在研究将在用户计算机上运行的Python程序。该程序应尽可能在行动之间闲置(每天3次)。行动应该在早上,下午和晚上。
所以我想告诉程序它必须每天在三个特定时间运行(实例化一个类并从中做一些方法)。
我知道一种方法,但我认为这是一种矫枉过正。
while True:
time = time.now()
if time in [08:00 am, 12:30pm, 08:00 pm]:
#Do what you have to do
你能告诉我这样编程的最佳方法吗?这个程序不会在我的计算机上运行,因此我想将所有内容作为一个组件进行管理。
编辑:马丁建议我使用cron工作。是否可以在Python代码中设置所有内容,以便我不必在客户端PC上更改任何内容?答案 0 :(得分:1)
由于您使用的是Windows,请考虑使用SCHTASKS
命令:
安排命令和程序定期运行或在a 特定的时间。添加和删除计划,启动和任务 按需停止任务,并显示和更改计划任务。
您的命令应如下所示:
schtasks /create /tn <TaskName> /tr <TaskRun> /sc hourly [/mo {1 - 23}] [/st <HH:MM>] [/sd <StartDate>] [/ed <EndDate>]
/mo
是重复间隔
有关完整文档,请参阅: https://technet.microsoft.com/en-ca/library/cc725744.aspx
答案 1 :(得分:0)
仅如果您无权访问客户端PC,您可以执行类似的操作 - 使用datetime
库计算现在的时间,然后在下次需要时使用不同的时间运行程序和now
,然后使用time.sleep
睡眠这么多秒。当你醒来时,再次运行你想要的任何东西,然后再做相同的事情计算从现在到下次你想要运行程序的时间。
示例代码 -
from datetime import datetime
import time
while True:
nw = datetime.now()
nw
>> datetime.datetime(2015, 6, 22, 17, 57, 5, 668002)
t = datetime(nw.year,nw.month,nw.day,22,0,0,0) # this is where you calculate next time you want to run the program.
t
>> datetime.datetime(2015, 6, 22, 22, 0)
td = t - nw
td.seconds
>> 14574
time.sleep(14574)
#<do your stuff>
请注意,在上面的代码中,>>
表示以前语句的打印值,它们不是代码的一部分。
虽然我不确定,是否有任何副作用(不良影响)使进程长时间睡眠。
如果您可以访问客户端的PC,或者可以让他运行任务调度程序或使用unix,cronjob,请将其视为更好的选择。