Gor*_*oro 5 python distributed-computing rabbitmq celery django-celery
在我的解决方案中,我使用分布式任务来监视硬件实例一段时间(比如10分钟).我必须做一些事情:
在整个会话(10分钟)内运行单个任务并执行所有这些任务是否安全,还是应该将这些操作拆分为自己的任务?
正如我所看到的,单个任务的优点是管理和实施时序约束会更容易.但:
运行大量(大多数)睡着的工人是不是一个好主意?例如,如果我知道最多会打开200个会话,我会有500名工作人员,以确保总有可用的"会话"席位?
ask*_*sol 10
对此没有一个通用的答案
因此,如果您有1个具有10个工作线程/进程的工作实例,则A现在可以使用10个线程并行运行,而不是在一个线程上顺序运行.
部件数称为任务粒度(精细或粗粒度).
每个部分必须有足够的计算/ IO来抵消向代理发送任务消息的开销,如果没有工作人员可以将其写入磁盘,接收消息的工作人员等等(请注意消息传递)可以调整开销,例如,您可以拥有一个瞬态队列(不会将消息保存到磁盘),并发送那些不那么重要的任务).
如果您有一个繁忙的集群,可能已经实现了最大并行度(例如,3个工作者实例,每个实例有10个线程/进程,所有正在运行的任务).
然后,许多人通过划分任务得不到多少好处,但是执行I/O的任务比CPU绑定任务(通过I/O操作分割)有更大的改进机会.
工人不会对长时间运行的任务过敏,不论是10分钟还是一小时.
但它并不理想,因为任何长时间运行的任务都会阻止该槽完成任何等待任务.为了减轻这种情况,人们使用路由,以便您拥有一个专用队列,其中包含必须尽快运行的任务的专用工作人员.
-