如何让pathos在远程服务器上生成进程?

2024-09-28 23:27:44 发布

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

我有两台电脑,都有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个进程,在amazonec2实例上运行4个进程,而是在本地处理器上运行所有8个进程。如何设置pathos,使其在我的CPU上生成4个进程,在Amazon实例上生成另外4个进程?在


Tags: totime进程thisdoquestionswhopathos
1条回答
网友
1楼 · 发布于 2024-09-28 23:27:44

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

尽管如此,由于ParallelPool是动态负载平衡的,所以很难具体地获得4个远程工作线程和4个本地工作线程。因此,如果您有“快速”任务要运行,那么绝大多数(如果不是全部)任务都将在本地运行,因为启动连接并传送任务并检索结果将比仅在本地运行作业花费更多的时间。您可以通过清零(或严格限制)池本地可用的ncpus来强制任务远程运行,但在何处运行的作业数将取决于本地可用任务数的自动负载平衡,以及一些衡量单个作业完成所需时间与远程连接和运行作业所需时间的度量。在

相关问题 更多 >