0

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

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

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

我想到的调度程序是 Advanced Python Scheduler。

4

1 回答 1

3

据我从“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是明智的,因为它是最简单的,所需的设置最少。一旦您对此有所了解,您就可以权衡利弊,确定适合您的用例。

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

于 2020-06-24T08:41:44.677 回答