Python调度函数

时间:2018-12-23 08:16:17

标签: python python-2.7

我有问题。我想每15分钟在09:00安排一次功能。并在11:00完成执行。

def function1():
     print("Hello")

您有什么想法吗?

5 个答案:

答案 0 :(得分:1)

如果您使用的是Unix计算机,则可以编写一个cronjob以每15分钟(或您希望的任何时间表)运行一个Python文件。该文件应包含并调用所需的任何函数。

在外壳中使用crontabcrontab -e打开crontab。

然后您可以添加,例如:

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

哪个会从9:00开始每15分钟运行一次,最后一次运行将在10:45开始。如果您想在当天的最后一次跑步中以11:00跑步,则必须在crontab中添加另一行,例如:

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

答案 1 :(得分:1)

您没有提到您的操作系统。

在Linux和MacOS上,使用cron

在Windows上,使用Scheduled Tasks

答案 2 :(得分:1)

有两种可能的方法:

1)您可以使用操作系统的调度系统在适当的时间运行脚本。在Windows上,这称为任务计划程序。在Linux上,这称为cron。有关使用cron的详细信息,请参见Henry Woody的答复。

2)您可以编写代码来准确计算代码运行之前需要等待的时间。然后,您运行您的代码,然后重复。有关更多详细信息,请参见这篇文章:Python - Start a Function at Given Time

根据您的描述,第一个选项将是最简单的,并且似乎是最合适的,但是两种方法都有合适的用例。

答案 3 :(得分:1)

您可以使用简单的cron作业来安排您的作业,也可以尝试尝试编排框架,例如Airflow-http://airflow.incubator.apache.org/

  

Airflow是一个以编程方式编写,安排和监视的平台   工作流程。

答案 4 :(得分:1)

如果您想在没有外部库或工具(例如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()