调度程序会降低您的Web应用程序速度吗?

时间:2020-06-24 08:28:51

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

据我从“高级Python计划程序”的文档中可以看到,它们没有提供不同的过程来运行计划的任务。那由您自己确定。

在他们的文档中,他们建议在单独的线程中运行“ 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,因为它是最简单的,所需的设置最少。一旦对此有所了解,就可以权衡一下适合您的用例的利弊。

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