Python schedule函数

n6lpvg4x  于 2023-05-27  发布在  Python
关注(0)|答案(6)|浏览(112)

我有个问题我想安排在09:00每15分钟一次的活动。11点结束行刑

def function1():
     print("Hello")

你有什么主意吗?

0kjbasz6

0kjbasz61#

你没有提到你的操作系统。
在Linux和MacOS上,使用cron
在Windows上,使用Scheduled Tasks

thtygnil

thtygnil2#

如果你使用的是Unix机器,你可以编写一个cronjob来每15分钟运行一个Python文件(或者按照你喜欢的任何时间表)。该文件应该包含并调用您想要的任何函数。
在shell中使用crontabcrontab -e打开crontab。
然后,您可以添加,例如:

*/15 09-10 * * * python3 /path/to/my/file.py

从9点开始每15分钟一次最后一次在10点45分。如果你想在11:00跑步作为当天的最后一次跑步,那就必须在crontab中添加另一行,如下所示:

0 11 * * * python3 /path/to/my/file.py
8yoxcaq7

8yoxcaq73#

您可以使用简单的cron作业来安排您的作业或尝试编排框架,如Airflow -http://airflow.incubator.apache.org/
Airflow是一个以编程方式创作、安排和监控工作流的平台。

xmjla07d

xmjla07d4#

有两种可能的方法:
1)您可以使用操作系统的调度系统在适当的时间运行脚本。在Windows上,这称为任务计划程序。在Linux上,这被称为cron。有关使用cron的详细信息,请参阅亨利Woody的回复。
2)您可以编写代码来精确计算代码运行之前需要等待的时间。然后,运行代码,并重复。查看这篇文章以获得更多细节:Python - Start a Function at Given Time
第一个选项将是最简单的,并且看起来最适合您的描述,但这两种方法都有适当的用例。

dwthyt8l

dwthyt8l5#

如果你想在没有外部库或工具(如cron)的情况下用纯Python来做这件事,你可以做这样的事情,在这里你会计算到你的动作的时间,并在这段时间内睡觉。
如果你运行这个,进程将永远运行,每天睡眠到9:00,此时它将运行function1()并等待下一个季度,直到11:00。
请注意,如果function1()运行时间超过15分钟,这将跳过该季度的执行并等待下一个。此外,如果您在9:00之后启动,它将等待第二天第一次执行。

from datetime import datetime,timedelta

def wait_for_nine():
    now = datetime.now()
    if now.hour < 9:
        wait_for = datetime.replace( now, hour=9, minute=0, second=0)
    else:
        wait_for = datetime.replace( now + timedelta(days=1), hour=9, minute=0, second=0)
    delta = wait_for - datetime.now()
    time.sleep(delta.seconds)

def wait_fifteen():
    now = datetime.now()
    next_quarter = 15 * (int(now.minutes / 15) + 1)
    wait_for = datetime.replace(now, minute=next_quarter % 60, second=0) + timedelta(hours= int(next_quarter / 60))
    delta = wait_for - dt.datetime.now()
    time.sleep(delta.seconds)

while True:
    wait_for_nine()
    now = datetime.now()
    eleven = datetime.replace(now, hour=11,minute=0, second= 0 )
    while now <= eleven:
        function1()
        wait_fifteen()
k2arahey

k2arahey6#

除了上面提到的(cron或纯Python),你可以尝试schedule module:

from datetime import datetime

import schedule

def function1():
    print("Hello")

schedule.every(15).minutes.do(function1)

while True:
    if datetime.now().hour == 9:
        schedule.run_pending()
    if datetime.now().hour == 11:
        schedule.clear()
        break

相关问题