使用Python中的线程连接到多台计算机

时间:2017-01-05 18:15:10

标签: python python-multithreading

我需要连接到多台机器并对它们执行一组命令。我想用线程来实现它,但不知道如何实现这一点。 以下是代码:

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()
'''

有人可以通过线程来帮助我实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

听起来你正试图重新发明AnsibleSalt。您可能希望使用这些工具之一进行调查,以实现在许多计算机上运行一组shell命令的目标。两者都恰好是用Python编写的,并且可以用Python扩展。

答案 1 :(得分:1)

假设函数conn_to_board(board_ip)已经执行了您想要的操作并且没有绑定相同的本地端口或者使用资源,则多线程很简单且您的代码几乎是正确的。我在注释代码中看到的唯一问题是你加入了循环中的每个线程,实际上是一个接一个地序列化它们 - 换句话说多线程在这里完全没用。

首先应创建并启动所有线程(如果数量足够低),然后将它们连接到一个新循环中:

...
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()