【问题标题】:Periodical task Django: Celerity vs Javascript/jQuery定期任务 Django:Celerity vs Javascript/jQuery
【发布时间】:2018-01-10 16:02:02
【问题描述】:

我知道有关于“如何在 Django 中制作定期任务”的问题,例如 this post。但我想知道哪个是最好的选择,使用该帖子中提到的选项中的一个(主要是 Celerity 或 cron)或处理来自 Javascript/jQuery 的定期任务。

我想要完成的只是每天在特定时间执行一项任务。从“view.py”调用函数。该函数将连接到 URL,下载文件并在该文件中搜索信息,然后将其存储在数据库中。之后,用新信息刷新主页。

各有优劣?

【问题讨论】:

  • 您必须提及情况以及您想要应用此功能的确切位置。这两种方法都适用于不同的情况
  • 哦,是的,对不起,我已经去编辑我的问题了
  • @ArpitSolanki 完成,再次抱歉

标签: javascript python django celery scheduled-tasks


【解决方案1】:

从 javascript 运行周期性任务当然不是一种选择,因为它需要您的前端来调用您的视图并运行任务。

我的建议是使用Celery 来运行周期性任务,因为它设置简单,并且在您的情况下,它只需要几行代码即可运行任务。

以下是如何运行周期性任务的示例:

from celery.task.schedules import crontab
from celery.decorators import periodic_task

@periodic_task(run_every=crontab(minute=0, hour=0)  )
def every_monday_morning():
    print("Execute every day at midnight")

参考:docs

【讨论】:

  • 感谢您的早日回复,我正在测试它。从 django 项目中的不同 python 脚本(view.py、urls.py、models.py)我猜我需要在其中添加此代码的脚本将是“views.py”,但我不确定.如果你能确认请。
  • 我注意到你提到的“Refs”是旧版本,更新的是following,我错了吗?
  • 您的链接是正确的。为旧链接道歉。无论您想每天运行什么代码,只需将其添加到上述函数中,然后启动 celery worker。
【解决方案2】:

我看不出客户端 javascript 在这里有什么帮助(如果它在服务器端运行,为什么还要使用 javascript?)

如果您的项目中有 celery 的其他用途,那么使用它来运行计划任务是有意义的,并且“专业”是它不需要在部署时进行任何手动 crontab 设置。

现在,如果它只是运行这个必须安装和设置(并运行!)的单个操作,整个 celery 堆栈(celery + rabbitmq + redis)与普通的 cron 作业(或为您的任何存在的调度程序相比)可能只是过度杀伤力。系统)。

此外,如果要执行的任务与 HTTP 请求/响应周期无关,那么它在您的视图中也没有任何关系。默认情况下,django-admin startapp 创建一个带有views.pymodels.pyurls.py 模块的包存根,但您可以根据需要添加任意数量的其他模块。对于要从​​命令行运行的脚本(cronjobs 就是这种情况),惯用的解决方案是将它们写为custom management commands

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2016-05-04
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多