2017-01-05 5 views
0

Мне нужно подключиться к нескольким машинам и выполнить набор команд на них. Я хочу реализовать это с помощью потоков, но не уверен, как я могу это достичь. Ниже приводится код:Подключение к нескольким машинам с потоком в Python

import threading 

def conn_to_board(board_ip): 
    # ssh connection to machine 
    # set of commands 

board_ip = ["1.1.1.1", "2.2.2.2", "3.3.3.3", "4.4.4.4"] 

''' 
for i in board_ip: 
    t1 = threading.Thread(target=conn_to_board, args=(i,)) 
    t1.start() 
    t1.join() 
''' 

Может кто-то мне помочь в достижении этой цели с резьбой?

+0

взглянуть на [pxssh] (HTTP: // pexpect .readthedocs.io/en/stable/api/pxssh.html) в библиотеке [pexpect] (http://pexpect.readthedocs.io/en/stable/index.html). –

ответ

1

Предполагая, что функция conn_to_board(board_ip) уже делает то, что вы хотите, и не связывает один и тот же локальный порт, или exclusivelu использует ресурс, многопоточность проста и ваш код почти прав. Единственная проблема, которую я вижу в вашем комментированном коде, заключается в том, что вы присоединяете каждый поток внутри цикла, фактически сериализируя их один за другим, - иначе говоря, многопоточность здесь совершенно бесполезна.

Вы должны сначала создать и начать все темы (если число достаточно низок), а затем присоединиться к ним в новом цикле:

... 
thrs = [] # to store the threads 
for i in board_ip: # create and start the threads 
    t1 = threading.Thread(target=conn_to_board, args=(i,)) 
    t1.start() 
    thrs.append(t1) 
for t1 in thrs:  # join all the threads 
    t1.join() 
+0

Спасибо Серж, я получил то, что я пропустил из вашего ответа! Он работает сейчас. –

1

Похоже, вы пытаетесь изобрести Ansible или Salt. Возможно, вы захотите изучить один из этих инструментов, чтобы выполнить свою задачу по запуску набора команд оболочки на многих машинах. Оба они записываются и расширяются с помощью Python.

 Смежные вопросы

  • Нет связанных вопросов^_^