Я использую следующий скрипт для соединения двух вычислительных узлов в кластере 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 была создана ssh.login(node, getuser())
, кажется, что строка ssh.sendline(worker_command % worker)
не имеет никакого эффекта, потому что сценарий, запускаемый worker_command
, не запускается.
Как можноЯ это исправлю?Или я должен попробовать что-то еще?
Как я могу создать один сокет на одном вычислительном узле и соединить его с сокетом на другом вычислительном узле?