Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python实现负载平衡_Python_Parallel Processing_Module - Fatal编程技术网

使用Python实现负载平衡

使用Python实现负载平衡,python,parallel-processing,module,Python,Parallel Processing,Module,今年夏天我正在做一些研究,并致力于并行化预先存在的代码。现在主要关注的是一种负载平衡代码的方法,以便它在集群上更高效地运行。当前的任务是进行概念验证,创建多个进程,每个进程都有自己的堆栈,当进程处理完堆栈后,它会查询最近的两个进程,查看它们的堆栈中是否还有可用的工作 我在用python概念化这一点上遇到了困难,但我希望有人能给我指出正确的方向,或者有一些类似于mpi4py或ParallelPython的示例。另外,如果有人知道更好或更简单的模块,那就很高兴知道了 谢谢。这里有一个简单的方法 创建

今年夏天我正在做一些研究,并致力于并行化预先存在的代码。现在主要关注的是一种负载平衡代码的方法,以便它在集群上更高效地运行。当前的任务是进行概念验证,创建多个进程,每个进程都有自己的堆栈,当进程处理完堆栈后,它会查询最近的两个进程,查看它们的堆栈中是否还有可用的工作

我在用python概念化这一点上遇到了困难,但我希望有人能给我指出正确的方向,或者有一些类似于mpi4py或ParallelPython的示例。另外,如果有人知道更好或更简单的模块,那就很高兴知道了


谢谢。

这里有一个简单的方法

  • 创建一个公共共享的工作队列。此应用程序 将用要做的工作填充此队列

  • 创建一个应用程序,该应用程序从队列中获取一个项目,并执行该工作

  • 这是单生产者多消费者设计。它运行良好,可以用并行进程淹没您的机器

    要使用内置队列类,您需要将队列包装为某种类型的 多处理API。就我个人而言,我喜欢创建一个小型的基于HTTP的web服务器来处理队列。每个应用程序都有一个 去拿下一件作品

    您可以使用RabbitMQ等工具创建一个非常好的共享队列。

    您可以使用来使用JMS队列

    您将需要一个小应用程序来创建并用工作填充队列

    创建任意数量的应用程序副本。例如:

    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服务器发布任务,并使用芹菜进行消费。更多关于芹菜的信息: