使用Python实现负载平衡
今年夏天我正在做一些研究,并致力于并行化预先存在的代码。现在主要关注的是一种负载平衡代码的方法,以便它在集群上更高效地运行。当前的任务是进行概念验证,创建多个进程,每个进程都有自己的堆栈,当进程处理完堆栈后,它会查询最近的两个进程,查看它们的堆栈中是否还有可用的工作 我在用python概念化这一点上遇到了困难,但我希望有人能给我指出正确的方向,或者有一些类似于mpi4py或ParallelPython的示例。另外,如果有人知道更好或更简单的模块,那就很高兴知道了使用Python实现负载平衡,python,parallel-processing,module,Python,Parallel Processing,Module,今年夏天我正在做一些研究,并致力于并行化预先存在的代码。现在主要关注的是一种负载平衡代码的方法,以便它在集群上更高效地运行。当前的任务是进行概念验证,创建多个进程,每个进程都有自己的堆栈,当进程处理完堆栈后,它会查询最近的两个进程,查看它们的堆栈中是否还有可用的工作 我在用python概念化这一点上遇到了困难,但我希望有人能给我指出正确的方向,或者有一些类似于mpi4py或ParallelPython的示例。另外,如果有人知道更好或更简单的模块,那就很高兴知道了 谢谢。这里有一个简单的方法 创建
谢谢。这里有一个简单的方法
for i in 1 2 3 4 5 6 7 8 9 10
do
python myapp.py &
done
这将同时运行应用程序的10个副本。所有10个都试图从一个队列中获取工作。他们将使用所有可用的CPU资源,操作系统将很好地为您安排这些资源
对等,节点到节点同步意味着所有节点之间有O(n*(n-1)/2)条通信路径 “两个相邻节点”意味着您仍然有2*n个通信路径,并且工作必须“以某种方式”在节点之间进行。如果节点最初都是工作种子,那么有人做了大量的计划来平衡工作负载。如果你要做那么多的计划,为什么还要要求节点同步呢 如果队列一开始没有仔细平衡,那么每个偶数节点都可能会变慢。每个节点都可能很快。奇数节点首先完成,检查来自两个偶数节点的功,这些节点(a)未完成,(b)也没有更多的功要做。现在怎么办?一半节点正在工作,一半节点处于空闲状态。所有这些都是由于在最初的工作分配中计划不当造成的
主从意味着您有n条通信路径。此外,平衡是自动的,因为所有空闲节点都有平等的工作权限。不存在导致整体性能差的偏差初始分布。使用模块谢谢,这与当前程序的设计类似,但他们希望采用节点到节点的结构,而不是主从结构。还有,如果一个队列被多个进程多次访问,会不会在集群上造成瓶颈?@ExtractedLojik:除非每个工作包都非常小,否则单个队列不应该是问题。这是纯粹的开销,所以您希望队列访问的成本分摊到大量高价值的工作中。芹菜是一个不错的选择。它可以很好地与rabbitmq配合使用,几乎没有配置更改。它有发布者和代理,允许您在多台机器上使用任意数量的消费者(使用rabbitmq或redis pub/sub等共享队列)。您可以使用http web服务器发布任务,并使用芹菜进行消费。更多关于芹菜的信息: