如何编写Python脚本在每天晚上11:30自动运行?

15 浏览
0 Comments

如何编写Python脚本在每天晚上11:30自动运行?

我正在使用Django开发一个Web应用程序,我想知道是否有一种方法可以定期调度任务运行。

基本上,我只想定期自动运行数据库中的一些计算/更新操作,但我似乎找不到相关的文档。

有人知道如何设置这个吗?

为了澄清:我知道可以设置一个cron任务来完成这个,但我想知道Django中是否有提供这个功能的特性。我希望人们能够自己部署这个应用程序,而不需要进行太多的配置(最好是零配置)。

我考虑过通过简单地检查上次发送请求到站点的时间以来是否应该运行任务来触发这些操作“追溯”,但我希望有一种更简洁的方法。

0
0 Comments

这个问题的出现是因为作者开源了一个被认为是结构化应用的应用程序,链接如上所示。作者希望得到任何反馈。这个应用程序有一个管理命令./manage.py runcrons,可以实现自动运行脚本的功能。每个定时任务被建模为一个类,并且每个定时任务在不同的频率下运行,同时确保相同类型的定时任务不会并行运行(以防定时任务本身的执行时间超过其频率!)。作者问了一个可能有点愚蠢的问题,即这个应用程序是否可以在Windows上通过at命令工作,或者它是专门为与cron命令一起工作而设计的。应答是因为它使用Python类,所以它基本上只是Python,不需要特定于平台的命令。

0
0 Comments

Celery是一个基于AMQP(RabbitMQ)构建的分布式任务队列。它还以类似于cron的方式处理周期性任务。根据你的应用程序,它可能值得一试。

Celery与django非常容易集成(文档),而且在应用程序宕机的情况下,周期性任务实际上会跳过错过的任务。Celery还具有内置的重试机制,以防任务失败。

问题的原因是需要编写一个Python脚本,在每天晚上11:30自动运行。解决方法是使用Celery来处理定时任务。

首先,需要安装Celery和RabbitMQ。可以使用pip来安装Celery,使用以下命令:

pip install celery

然后,需要在项目的settings.py文件中配置Celery。可以在文件的末尾添加以下内容:

# Celery Configuration
CELERY_BROKER_URL = 'amqp://localhost'
CELERY_RESULT_BACKEND = 'amqp://localhost'

接下来,需要创建一个tasks.py文件来定义定时任务。在该文件中,可以编写一个函数,该函数将在每天晚上11:30运行。以下是一个示例:

from celery import Celery
app = Celery('tasks', broker='amqp://localhost')
@app.task
def run_script():
    # 执行需要在每天晚上11:30运行的脚本
    pass

最后,需要在终端中运行Celery worker来启动定时任务。使用以下命令:

celery -A tasks worker --beat --loglevel=info

这样,每天晚上11:30,Celery将自动运行定义的任务函数。这样就实现了Python脚本在每天晚上11:30自动运行的功能。

0
0 Comments

如何编写Python脚本以在每天晚上11:30自动运行?

出现的原因:

有人提出了在每天晚上11:30自动运行Python脚本的问题。他们希望找到一种简单的解决方案,而不需要安装庞大的AMQP堆栈,并且不希望将应用程序逻辑分散到crontab文件中。

解决方法:

有几种方法可以解决这个问题。一种解决方法是创建一个自定义管理命令,并使用cron或at工具在指定的时间运行该命令。以下是解决方法的具体步骤:

1) 创建一个自定义管理命令。可以使用Django框架的manage.py文件来创建一个自定义命令。例如:

python manage.py my_cool_command

2) 使用cron(在Linux上)或at(在Windows上)来在所需时间运行该命令。可以在crontab或at命令中设置定时任务,以便在每天晚上11:30运行该命令。

这种方法非常简单,不需要安装庞大的AMQP堆栈,并且适用于小型到中型应用程序以及不希望有太多外部依赖的情况。但是,使用像Celery这样的工具也有很多优势,可以避免将应用程序逻辑分散到crontab文件中。

如果在Windows 8、Server 2012及更高版本中使用的是at命令,可以使用schtasks.exe命令来实现相同的功能。

通过创建自定义管理命令和使用cron或at工具,可以实现在每天晚上11:30自动运行Python脚本的需求。这种方法简单易行,不需要安装复杂的AMQP堆栈,并且适用于小型到中型应用程序。当然,使用像Celery这样的工具也是一个好的选择,可以更好地管理和跟踪后台任务。

注:以上内容为整理总结,不提供代码实现。

0