Python,while循环,每小时开始时调用方法

0 投票
2 回答
1903 浏览
提问于 2025-04-18 03:53

好的,我有一个IRC机器人,这是我在学习Python时的一个持续项目,感谢这里的每一个人,当我遇到困难时,你们都给予了我帮助。

我有一个循环,我想找个办法来检查是否新的一小时已经开始,如果是的话,就运行一个方法来更新设置,并确保它仍然连接着频道。我就是不知道该怎么检查时间,然后调用这个方法。

在这个循环里还有很多其他事情在发生,所以让它每小时睡一次并不是最好的办法。

我知道没有代码的问题会被降分,所以这里有一些代码。

while 1:
    if(newhour() == 1):
        run_Method()

2 个回答

1

不要使用无限循环的 while 循环,这样会浪费一个处理器核心,只是为了运行一个无聊的循环。如果你真的要用它来做一些简单的测试,至少在循环里面加个 sleep(),让它休息一下。

系统已经有一个定时任务服务(Cron)在运行,可以用来处理这个任务。把你的脚本放到那里(或者创建一个脚本来调用你的主脚本)。

$ cd /etc/cron.hourly/

假设 proj_x.sh 是用来调用你的主脚本的。你可以创建 proj_x.sh:

$ vi proj_x.sh

把下面的代码放进 proj_x.sh 里:

#!/usr/bin/env python 
/home/user/path_to_proj_x/cron_hourly.py

让它可以执行:

$ chmod +744 proj_x.sh

现在,/home/user/path_to_proj_x/cron_hourly.py 是你的主脚本,里面包含了你的 run_method() 方法。

2

为了回答你的问题,你可以这样做:

current_hour = datetime.now().hour

while 1:
    if(datetime.now().hour != current_hour):
        run_Method()
        current_hour = datetime.now().hour

警告:这个方法非常简单。

撰写回答