如何在Google Cloud Platform中设置长期运行的Django命令

问题描述 投票:0回答:1

我最近将我的网站移到了Google Cloud Run。

问题是,我还需要移动几个cron作业,这些作业每天在容器内运行Django命令。如果我不想为始终运行节点实例的完整Kubernetes集群付费,那么首选的方法是什么?

我希望先运行任务,然后再降低服务器速度,就像Cloud Run在收到传入请求时所做的那样。我已经搜索了所有文档,但是在为不需要在Google Cloud中使用基础服务器的容器内的长期运行任务找到正确的解决方案时遇到了麻烦。

有人可以指出正确的方向吗?

django google-cloud-platform cron
1个回答
0
投票

Cloud Run请求超时限制为15分钟

Cloud Functions函数超时限制为540秒

对于长时间运行任务在需要时上下旋转计算实例是更可取的选择。


如何调度的示例,自动运行和停止计算实例的解释很好:Scheduling compute instances with Cloud Scheduler

总而言之:实际实例的启动/停止由Cloud Functions执行。时间表上的Cloud Scheduler将所需的任务发布到Cloud Pub/Sub队列中,从而触发这些功能。您在主逻辑末尾的代码也可以将消息发布到Cloud Pub/Sub以运行Stop this instance任务。


如何在Django中处理任务?

  • 可以是相同的django应用程序>]从wsgi服务器开始处理传入的请求(如常规django站点),但请求/响应/其他超时增加,wsgi工作者的寿命很长...-在这种情况下,任务是对Django视图的常规HTTP请求

  • 它可能只是一个script

  • (或django管理命令)在云实例启动时运行,仅自动执行一项任务
  • 您可能还想为任​​务传递其他参数

  • ,在这种情况下,您可以将一个Cloud Pub/Sub任务和一个带有自定义参数的Start instance任务发布到main logic,并拉出您的代码从Pub/Sub首先
  • 更多django-native-使用Celery并将芹菜工作者作为单独的Compute Instance


  • [一种可能的选择,仅使用一名Celery工作者,而没有其他所有部分(即,经纪人(没有官方内置的Cloud Pub / Sub支持)),以及将任务从Cloud Pub / Sub中拉出/推入)

  • dummy filesystem broker运行芹菜工人
  • 将目标方法添加为@periodic_task以运行,即每30秒运行一次
  • 在任务开始时-订阅Cloud Pub / Sub队列,检查新任务,接收一个并开始处理
  • 在任务的和-发布到Cloud Pub / Sub结果并调用Stop this instance

  • 还有Cloud Tasks

(超时限制:使用自动启动-10分钟,手动启动-24小时)作为Cloud Run添加用于异步任务,但在这种情况下,Cloud Pub / Sub更适合。
© www.soinside.com 2019 - 2024. All rights reserved.