我正在使用以下脚本来连接Slurm群集中的两个计算节点。
from getpass import getuser
from socket import gethostname
from pexpect import pxssh
import sys
python = sys.executable
worker_command = "%s -m worker" % python + " %i " + server_socket
pid = 0
children = []
for node, ntasks in node_list.items():
if node == gethostname():
continue
if node != gethostname():
pid_range = range(pid, pid + ntasks)
pid += ntasks
ssh = pxssh.pxssh()
ssh.login(node, getuser())
for worker in pid_range:
ssh.sendline(worker_command % worker + '&')
children.append(ssh)
node_list
是字典{'cn000': 28, 'cn001': 28}
。 worker
是放置在工作词典中的python文件。
我希望ssh.sendline
与pexpect.spawn
相同。但是,运行脚本后没有任何反应。
尽管ssh.login(node, getuser())
建立了一个ssh会话,但看来ssh.sendline(worker_command % worker)
行没有任何作用,因为要运行的worker_command
脚本没有运行。
我该如何解决?还是我应该尝试其他东西?
如何在一个计算节点上创建一个套接字并将其与另一计算节点上的套接字连接?
答案 0 :(得分:0)
worker_command的内容中缺少'%s'。它包含如下内容:“ / usr / bin / python3 -m worker”-> worker_command%worker应该导致错误。
如果不是(可能,因为此源看起来像原始程序的一小部分),则在“&”之前添加“ >> workerprocess.log 2>&1”字符串,然后尝试运行程序并执行看看服务器上的workerprocess.log!如果$ HOME在服务器上可写,则应该在其中找到错误消息。