【问题标题】:Do schedulers slow down your web application?调度程序会减慢您的 Web 应用程序吗?
【发布时间】:2020-06-24 08:28:51
【问题描述】:

我正在建立一家珠宝电子商务商店,我正在建立的一项功能是将当前市场黄金价格纳入最终产品价格。我打算通过使用调度程序调用 api 每 3 天更新一次黄金价格,因此整个过程是自动化的,并且需要与系统的交互最少。

我担心的是:每 72 小时执行一个任务的调度程序会减慢我的服务器(使用客户端-服务器模型)并影响其性能吗?

服务器端应用程序是使用 Django、Django REST 框架和 PostgresSQL 构建的。

我想到的调度器是 Advanced Python Scheduler。

【问题讨论】:

    标签: django django-rest-framework web-operating-system


    【解决方案1】:

    据我从“Advanced Python Scheduler”的文档中可以看出,它们没有提供不同的进程来运行计划任务。这留给你自己弄清楚。

    从他们的文档中,他们推荐了一个在单独的线程中运行的“BackgroundScheduler”。

    现在可能会出现多个问题:

    1. 如果您正在运行多个 Django 实例(使用 gunicorn 或 uwsgi),APS 调度程序将在每个进程中运行。除非 APS 考虑到这一点(您必须查看文档),否则这是一个需要解决的重要问题。
    2. BackgroundScheduler 将在线程中运行,但 python 受 GIL 限制。因此,如果您的后台任务是 CPU 密集型任务,您的 Django 进程在处理传入请求时会变慢。
    3. 无论是否使用线程,如果您的后台作业是 CPU 密集型 + 持续时间较长,则会影响您的服务器性能。

    APS 似乎是一个低级的库,我的建议是使用更简单的东西:

    1. 只需使用系统 cronjobs 每 3 天运行一次。创建一个 django 管理命令,并使用 cron 执行该命令。
    2. 使用 django 支持的库,例如 celery、rq/rq-scheduler/django-rq 或 django-background-tasks。

    我认为看看https://github.com/arteria/django-background-tasks 是明智的,因为它是最简单的,所需的设置最少。一旦您对此有所熟悉,您就可以权衡利弊,确定适合您的用例。

    同样,您的服务器性能取决于您的后台任务正在做什么以及它持续多长时间。

    【讨论】:

    • 再次感谢您的意见,谢谢!它不是很复杂,它只是以恒定的方式进行 API 调用,设置间隔并更新系统中的所述值 - 我已将黄金价格存储在 settings.py 文件中。我知道它需要一个线程来倒计时(或类似的东西?)。我会先看看 django bg 任务——一旦找到解决方案就会更新!谢谢大佬,干杯!
    • 谢谢,如果有任何问题,请随时通过电子邮件(在我的个人资料中)与我联系。同时,如果您能选择此作为答案,我将不胜感激:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多