【问题标题】:How to manage long running tasks via website如何通过网站管理长时间运行的任务
【发布时间】:2021-08-07 17:16:33
【问题描述】:

我有一个 django 网站,在那里我可以在某些网站上注册一些事件侦听器和监视任务,查看有关这些任务的信息、编辑、删除等。这些任务运行时间很长,所以我将它们作为任务启动异步事件循环。我希望它们独立于 django 网站,因此我在 Sanic 网络服务器旁边的事件循环中运行这些任务,并使用来自 django 服务器的 api 调用来控制它。我不知道为什么,但我仍然觉得这个解决方案很磨损,那么有没有更好的方法呢?我正在考虑使用 kubernetes,但这些任务并不占用大量资源并且很简单,所以我认为不值得为每个任务启动新的 pod。 感谢您的帮助。

【问题讨论】:

标签: python django asynchronous


【解决方案1】:

理想情况下,为新活动或工作启动新 pod 总是一个好主意。

您可以在 Kubernetes 中使用 cronjob,以便在工作完成时自动删除它们。

最好保持单独的小型微服务,而不是在容器内运行整个单体应用程序。

在管理方面,使用启动新 pod 也很容易管理,如果您根据资源要求扩展和缩小集群,也很划算。

您还可以使用消息代理和侦听器,它们将侦听消息代理中的通道并执行异步任务或事件(如果有)。 Listen 考虑为单独的 pod。

【讨论】:

  • 感谢您的回答!如果我在一个事件循环中运行一千个任务,或者我运行一千个 Pod,每个 Pod 一个任务,那么所需资源的差异有多大?
  • 肯定很多,运行一千个 pod 并每个任务执行一个任务并不是一个好主意。
  • 那么我应该为每 N 个任务启动一个新的 pod 吗?
  • 我不确定您在任务中做什么以及任务如何,理想情况下您应该在容器中运行单个进程,也许您在单个 POD 中执行数千个任务。但是检查可能会有所帮助:github.com/coleifer/huey
  • 任务示例是 twitch bot,它监听 websocket,连接到几个频道,并在某些事件上将数据写入数据库。当用户通过 django 网站停用他时,他停止收听。
猜你喜欢
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
相关资源
最近更新 更多