如何获得在远程服务器上生成进程的悲哀?

时间:2018-08-24 03:30:33

标签: python pathos

我有2台计算机,两台计算机都装有pathos Python模块。我有一个Pathos多处理池,并且一直在尝试使用以下代码让Pathos在两个CPU之间平均分配进程数:

from pathos.multiprocessing import ProcessPool
ngramPool = ProcessPool()
ngramPool.ncpus = 8
ngramPool.servers = ('localhost:5653','ec2-18-223-23-82.us-east-2.compute.amazonaws.com:5653')
questionNgrams = []
i = 0
previousI = 0
previousTime = time.time()
#Test questions
#questions = ["To whom do I owe this great pleasure","Who do I owe this great pleasure which is a great pleasure to","Who do I owe this great pleasure to"]
questionNgrams = ngramPool.map(n_gram.stringToNgrams,questions)

但是,不是在我的本地CPU上运行4个进程,而是在Amazon EC2实例上运行4个进程,而是在我的本地处理器上运行所有8个进程。我该如何设置pathos,使其在我的CPU上生成4个进程,在Amazon实例上生成另外4个进程?

1 个答案:

答案 0 :(得分:0)

我是pathos的作者。使用分布式资源并不是您想要的那样简单。您的评论是正确的,pathos使用基于RPC的(包装在SSH中)连接。您也是正确的,因为您必须在远程主机上设置ppserver。如果需要建立ssh连接,则可以使用pathos_connect脚本(请参阅相关文档),或直接使用pathos.secure模块中的代码来进行。请注意,您还需要确保您的ssh-agent正常工作,并且已设置ssh密钥对身份验证(即,在初始连接后不使用密码)。

话虽这么说,要特别指定4个远程工作人员和4个本地工作人员是非常困难的-因为ParallelPool是动态负载均衡的。因此,如果您有“快速”任务要运行,则绝大多数(如果不是全部)任务将在本地运行,因为旋转连接和运送任务以及检索结果将比仅在本地运行作业花费更多时间。您可以通过清零(或严重限制)池中本地可用的ncpus来强制任务远程运行,但是在哪里运行多少作业将取决于本地可用任务数量的自动负载平衡,有些衡量单个作业完成时间与远程连接和运行作业所花费的时间。