芹菜:长时间专用的单片任务与短时间的多任务

2024-05-16 22:58:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的解决方案中,我使用分布式任务监视硬件实例一段时间(比如10分钟)。我必须在以下情况下做些事情:

  • 我开始这个监控环节
  • 我完成这个监控环节
  • (可能)在监测期间

在整个会话(10分钟)中运行一个任务并执行所有这些任务是安全的,还是应该将这些操作拆分为各自的任务?在

在我看来,单一任务的优点是更容易管理和实施时间限制。但是:

管理一大群(大部分)睡着的工人是个好主意吗?例如,如果我知道最多我将有200个会议开放,我有一个500个工人池,以确保始终有可用的“会议”席位?在


Tags: 实例硬件时间分布式情况解决方案会议事情
1条回答
网友
1楼 · 发布于 2024-05-16 22:58:47

对此没有一刀切的答案

  • 将一个大任务a分成许多小部分(a¹,a²,a³,…)将增加潜在的并发性。在

所以如果你有一个工作实例,有10个工作线程/进程, 现在可以使用10个线程并行运行,而不是按顺序运行 一根线。在

部分的数量称为任务粒度(细粒度或粗粒度)。在

  • 如果任务粒度太细,则消息传递的开销会降低性能。在

每个部分必须有足够的计算/IO来抵消发送任务的开销 将消息发送给代理,如果没有工作线程接收消息,则可能将其写入磁盘,依此类推(请注意,消息传递开销可以调整,例如,您可以拥有一个临时队列(而不是将消息持久化到磁盘),并发送不那么重要的任务)。在

  • 一个繁忙的集群可能使这一切变得毫无意义

如果您有一个繁忙的集群,那么可能已经达到了最大的并行性(例如,3个worker实例,每个实例有10个线程/进程,所有的任务都在运行)。在

然后,通过划分任务,您可能得不到太多好处,但是执行I/O操作的任务比CPU限制的任务(按I/O操作拆分)有更大的改进机会。在

  • 长时间运行的任务很好

工人对长时间运行的任务不过敏,不管是10分钟还是1小时。在

但这也不理想,因为任何长时间运行的任务都会阻止这个槽 完成所有等待的任务。为了减轻这种情况,人们使用路由,这样您就有了一个专用队列,并为必须尽快运行的任务配备了专用的工作人员。在

-

相关问题 更多 >